2012-08-31 34 views
0

我正在使用RegEx替换一个字符串。我知道我在那个字符串中搜索的模式可能只出现一次。方法replaceAll()replaceFirst()都适用于我的方案。但我正在使用replaceAll()方法。replaceAll()和replaceFirst()。哪一个更快更高效?

在我的应用程序中每毫秒的计算是宝贵的。

我的选择正确吗?哪一个更适合我的场景?任何比较可用?请指导我。

+2

我会使用CPU和内存分析器来调整您的应用程序。如果您不这样做,您可以进行以下更改:a)增加复杂性,但没有区别b)帮助但影响不大c)使问题变得更糟。 –

+0

快速查看replaceFirst和replaceAll的javadoc会清除很多,我认为http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#replaceFirst(java .lang.String,java.lang.String) –

+1

我不知道为什么要问这个问题。 'replaceFirst'不可能比'replaceAll'更糟糕,它肯定会表现得更好。如果每个ms对你都很重要,为什么你使用'replaceAll'? –

回答

18

如果每个毫秒对你来说都很珍贵,那么你应该尺寸不问。在任何情况下,我的猜测(再次:通过测量验证)是replaceFirst()会更快,因为它可以在第一次匹配后停止,而不是搜索其他人(在您的情况下不会存在)。

您可能还想要预编译正则表达式,因为每次调用replaceFirst()时都可以节省时间。或者寻找一种避免正则表达式的方法,如果它只是一个简单的字符串替换。

但我再次强调:使用探查器找出你花在哪里的最多时间并优化那部分。过度优化一次只能调用一次的语句并不是很有用,它只会占用整个运行时的0.07%,而忽略紧靠它的胖循环,占用80%的运行时间。同样到目前为止,我的经验是,瓶颈往往是在最令人惊讶的地方,并且而不是,你会天真地期待他们。

1

当然replaceFirst()更快,它会在第一次发生后停止,而replaceAll()将扫描整个输入。