java中的正则表达式及其与indexOf的性能比较
请有人告诉我如何使用正则表达式在字符串中匹配“ux”和句点“.”一次,使用indexOf()代替正则表达式是否更有效java中的正则表达式及其与indexOf的性能比较,java,performance,Java,Performance,请有人告诉我如何使用正则表达式在字符串中匹配“ux”和句点“.”一次,使用indexOf()代替正则表达式是否更有效 String s= "Hello_Wor.ld" or s="12323_!£££$.asdfasd" 基本上,任何字符都不能出现在\uu和之前和之后。唯一的要求是整个字符串只能包含\u的一次出现,并且的索引将比正则表达式快得多,也可能更容易理解 只要测试indexOf('''u')>=0,然后测试indexOf(''u',indexOfFirstUnderScore)
String s= "Hello_Wor.ld" or
s="12323_!£££$.asdfasd"
基本上,任何字符都不能出现在
\uu
和
之前和之后。唯一的要求是整个字符串只能包含\u
的一次出现,并且
的索引将比正则表达式快得多,也可能更容易理解
只要测试indexOf('''u')>=0
,然后测试indexOf(''u',indexOfFirstUnderScore)<0
。在这段时间里也要这样做
private boolean containsOneAndOnlyOne(String s, char c) {
int firstIndex = s.indexOf(c);
if (firstIndex < 0) {
return false;
}
int secondIndex = s.indexOf(c, firstIndex + 1);
return secondIndex < 0;
}
private boolean包含EANDONLYONE(字符串s,字符c){
int firstIndex=s.indexOf(c);
if(firstIndex<0){
返回false;
}
int secondIndex=s.indexOf(c,firstIndex+1);
回归指数<0;
}
将字符串与单个匹配:
/^[^.]*\.[^.]*$/
与相同\uu
:
/^[^_]*_[^_]*/
组合正则表达式应该类似于:
/^([^._]*\.[^._]*_[^._]*)|([^._]*_[^._]*\.[^._]*)$/
现在应该很明显,indexOf
是更好的解决方案,更简单(性能在成为瓶颈之前是无关紧要的)
如果有兴趣,请注意组合正则表达式如何包含两个术语,即“单个
前面有单个
的字符串”,反之亦然。三个字符有六个,n!为了。同时运行正则表达式和结果比使用组合正则表达式更简单
在使用正则表达式时,必须始终寻找更简单的解决方案。我现在可以安全地删除我的答案了!:)您应该更加关注哪一个更容易阅读和理解,从而更容易维护,在大多数逻辑情况下,regex
将失去这一考虑,在直接匹配的情况下,regex
可能会获胜。