java中的正则表达式与indexOf的性能相比

时间:2011-11-16 19:14:43

标签: java performance

请有人告诉我如何匹配“_”和句号“。”使用正则表达式在字符串中激动一次,使用indexOf()而不是正则表达式也更有效。

String s= "Hello_Wor.ld"  or 
s="12323_!£££$.asdfasd"

基本上,在_.之前和之后,任何字符都不能出现,唯一的要求是整个字符串只应包含一个_. <的出现/ p>

2 个答案:

答案 0 :(得分:7)

indexOf比正则表达式快得多,而且可能也更容易理解。

只测试indexOf('_') >= 0,然后测试indexOf('_', 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;
}

答案 1 :(得分:2)

将字符串与单个.匹配:

/^[^.]*\.[^.]*$/

_相同:

/^[^_]*_[^_]*/

合并的正则表达式应该是这样的:

/^([^._]*\.[^._]*_[^._]*)|([^._]*_[^._]*\.[^._]*)$/

现在显而易见的是indexOf是更好的解决方案,更简单(性能无关紧要,直到它被证明是瓶颈)。

如果有兴趣,请注意合并的正则表达式有两个术语,“单个.之前的单个_”,反之亦然。这将有六个三个字符,和n!为了运行正则表达式和AND结果比使用组合正则表达式更简单。

在使用正则表达式时,必须始终寻找更简单的解决方案。