replaceAll()和replaceFirst()。哪一个更快更有效?

时间:2012-08-31 08:16:05

标签: java regex string replace

我正在使用RegEx替换字符串。我知道我在该字符串中搜索的模式可能只出现一次。 replaceAll()replaceFirst()方法都适用于我的方案。但我正在使用replaceAll()方法。

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

我的选择对吗?哪一个对我的情况更好?有任何比较可用吗?请指导我。

2 个答案:

答案 0 :(得分:18)

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

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

但我再次强调:使用分析器找出你花费最多时间的地方并优化那部分。过度优化一次只调用一次的语句并且只占总运行时间的0.07%而忽略它旁边的胖循环,占用运行时间的80%并不是非常有用。到目前为止,我的经验是,瓶颈往往是在最令人惊讶的地方,而不是你天真地期待它们。

答案 1 :(得分:1)

肯定replaceFirst()更快,它会在第一次出现后停止,而replaceAll()将扫描整个输入。