Java:正则表达式与if语句

时间:2012-07-12 15:01:13

标签: java regex if-statement

我有一个数组,我想搜索以“test”开头的字符串(例如);搜索这些前缀的最有效方法是什么?正则表达式或if语句?

正则表达式:

    boolean found = false;
    for (String line: ArrayList){
                Pattern pattern = 
                Pattern.compile("^test"); //regex

                Matcher matcher = 
                pattern.matcher(line);


                while (matcher.find()) {
                    found = true;
                }
                if(found){
                    doSomething();
                         } 
                    }
                }

如果声明:

for (String line : ArrayList) {
       if (line.startsWith("test"){
            doSomething();
            }

哪个最有效?

哪种方法对较长的字符串最有效?

如果我想找到以“test”开头但后面只有“test”之后有“foo”的字符串,哪种方法更好?

如果Regex是答案,那么以“test”开头,然后是“foo”或“bar”而不是两者都是正确的语法是什么?

6 个答案:

答案 0 :(得分:6)

4行代码与16行相比?不管哪个运行速度更快,4行版本的写入效率更高,维护效率更高。

如果您有一些代码并对其进行基准测试并确定了一个特定的瓶颈,那么可以考虑使其更复杂,否则每次都使用更简单的版本。

答案 1 :(得分:5)

只需使用startsWith即可。正则表达式有点矫枉过正,除非你想接受带前导空格的String。

startsWith可以使用" test"甚至" testfoo"。如果您的意思是"foo"可以出现在"test"后的输入中的任何位置(即"testokokokfoonothing"),则应在此处使用正则表达式。

您的正则表达式版本代码可以缩短为:

for (String line: ArrayList){
    if (line.matches("^test.*") {
        doSomething();
    }
}

matches()检查整个输入是否与正则表达式匹配,因此需要对正则表达式进行一些修改。上面的代码稍慢,因为Pattern被重新编译。

答案 2 :(得分:2)

正则表达式会产生相当大的开销;如果你正在做一些有“直接”实施的事情 - 比如startsWith - 几乎总是会更快。

答案 3 :(得分:1)

我喜欢IF语句。就个人而言,如果可能的话,我会避免使用正则表达式。它们变得复杂且难以编码。在编码方面,最重要的一点是可维护性,Regex不提供。

留下if语句。

答案 4 :(得分:1)

你应该更喜欢startsWith()。它更具惯用性,简洁性,并且您不太可能更快地实现某些功能,尤其是使用java.util.regex时,因为编写低效的正则表达式相对容易。

通常,当String对象上的标准方法不够时,您应该只使用java.util.regex。

关于你的Regex代码的一些注意事项,如果你 要使用正则表达式做其他事情,你不应该在你的循环中运行Pattern.compile。您可以通过以下方式进一步简化代码:

if (matcher.find()) {
    doSoemthing();
}

答案 5 :(得分:0)

首先要做的事情是:将Pattern pattern = Pattern.compile("^test"); //regex放在for之外,因为编译会占用时间,而且必须只执行一次。

   Pattern pattern = Pattern.compile("^test.*"); //regex
   for (String line: ArrayList){
       if(patter.matches(line)){
            oSomething();
       }
   }
相关问题