我正在使用RegEx替换一个字符串。我知道我在那个字符串中搜索的模式可能只出现一次。方法replaceAll()
和replaceFirst()
都适用于我的方案。但我正在使用replaceAll()
方法。replaceAll()和replaceFirst()。哪一个更快更高效?
在我的应用程序中每毫秒的计算是宝贵的。
我的选择正确吗?哪一个更适合我的场景?任何比较可用?请指导我。
我正在使用RegEx替换一个字符串。我知道我在那个字符串中搜索的模式可能只出现一次。方法replaceAll()
和replaceFirst()
都适用于我的方案。但我正在使用replaceAll()
方法。replaceAll()和replaceFirst()。哪一个更快更高效?
在我的应用程序中每毫秒的计算是宝贵的。
我的选择正确吗?哪一个更适合我的场景?任何比较可用?请指导我。
如果每个毫秒对你来说都很珍贵,那么你应该尺寸不问。在任何情况下,我的猜测(再次:通过测量验证)是replaceFirst()
会更快,因为它可以在第一次匹配后停止,而不是搜索其他人(在您的情况下不会存在)。
您可能还想要预编译正则表达式,因为每次调用replaceFirst()
时都可以节省时间。或者寻找一种避免正则表达式的方法,如果它只是一个简单的字符串替换。
但我再次强调:使用探查器找出你花在哪里的最多时间并优化那部分。过度优化一次只能调用一次的语句并不是很有用,它只会占用整个运行时的0.07%,而忽略紧靠它的胖循环,占用80%的运行时间。同样到目前为止,我的经验是,瓶颈往往是在最令人惊讶的地方,并且而不是,你会天真地期待他们。
当然replaceFirst()
更快,它会在第一次发生后停止,而replaceAll()
将扫描整个输入。
我会使用CPU和内存分析器来调整您的应用程序。如果您不这样做,您可以进行以下更改:a)增加复杂性,但没有区别b)帮助但影响不大c)使问题变得更糟。 –
快速查看replaceFirst和replaceAll的javadoc会清除很多,我认为http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#replaceFirst(java .lang.String,java.lang.String) –
我不知道为什么要问这个问题。 'replaceFirst'不可能比'replaceAll'更糟糕,它肯定会表现得更好。如果每个ms对你都很重要,为什么你使用'replaceAll'? –