我有一个数组,我想搜索它以"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"而不是两者都说正确的语法是什么?
4行代码与16行相比?不管哪个运行得更快,4行版本的写入效率更高,维护更有效.
如果您有一些代码并对其进行基准测试并确定了特定的瓶颈,那么可以考虑使其更复杂,否则每次都使用更简单的版本.
只是用startsWith
.正则表达式有点矫枉过正,除非你想接受带有前导空格的String.
startsWith
可以使用"测试"甚至"testfoo".如果你的意思是它"foo"
可以出现在输入之后的任何地方"test"
(即"testokokokfoonothing"
),那么应该在这里使用正则表达式.
您的正则表达式版本的代码可以缩短为:
for (String line: ArrayList){
if (line.matches("^test.*") {
doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
matches()
检查整个输入是否与正则表达式匹配,因此需要对正则表达式进行一些修改.上面的代码稍慢,因为Pattern
重新编译.