Java:正则表达式与if语句

3 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();
                         } 
                    }
                }
Run Code Online (Sandbox Code Playgroud)

如果声明:

for (String line : ArrayList) {
       if (line.startsWith("test"){
            doSomething();
            }
Run Code Online (Sandbox Code Playgroud)

哪个最有效?

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

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

如果Regex是答案,那么用"test"后跟"foo"或"bar"而不是两者都说正确的语法是什么?

Dun*_*can 6

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

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


nha*_*tdh 5

只是用startsWith.正则表达式有点矫枉过正,除非你想接受带有前导空格的String.

startsWith可以使用"测试"甚至"testfoo".如果你的意思是它"foo"可以出现在输入之后的任何地方"test"(即"testokokokfoonothing"),那么应该在这里使用正则表达式.

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

for (String line: ArrayList){
    if (line.matches("^test.*") {
        doSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

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