String.replaceAll比自己完成这个任务要慢得多。
- 论坛
- String.replaceAll比自己完成这个任务要慢得多。
10 浏览
String.replaceAll比自己完成这个任务要慢得多。
我有一段旧代码,用于在字符串中查找和替换标记。它接收一个from
和to
对的映射,遍历它们,并针对每对,在目标字符串上进行遍历,使用indexOf()
查找from
,并用to
的值替换它。它在一个StringBuffer
上完成所有工作,并最终返回一个String
。
我用这行代码替换了那段代码:replaceAll("[,. ]*", "");
然后我进行了一些性能比较测试。
当比较1,000,000
次迭代时,得到了以下结果:
旧代码:1287ms
新代码:4605ms
多了3倍!
然后我尝试用3次调用replace
来替换它:
replace(",", "");
replace(".", "");
replace(" ", "");
这导致了以下结果:
旧代码:1295
新代码:3524
多了2倍!
有什么办法可以解释为什么replace
和replaceAll
这么低效?我能做些什么来提高速度吗?
编辑:感谢所有的答案-主要问题确实是[,. ]*
没有达到我想要的效果。将它改为[,. ]+
几乎等于非正则表达式的解决方案的性能。
使用预编译的正则表达式有所帮助,但效果不大。(这是一个非常适用于我的问题的解决方案。
测试代码: