Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的正则表达式及其与indexOf的性能比较_Java_Performance - Fatal编程技术网

java中的正则表达式及其与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)

请有人告诉我如何使用正则表达式在字符串中匹配“ux”和句点“.”一次,使用indexOf()代替正则表达式是否更有效

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
可能会获胜。