我有一段旧代码,用于在字符串中执行查找和替换标记.
它接收映射from和to对,迭代它们,对于每个对,迭代目标字符串,查找from使用indexOf(),并用值替换它to.它完成了a的所有工作StringBuffer并最终返回a String.
我用这一行替换了代码:replaceAll("[,. ]*", "");
我运行了一些比较性能测试.
比较1,000,000迭代时,我得到了这个:
旧代码:1287ms
新代码:4605ms
3倍长!
然后我尝试用3次调用替换它replace:
replace(",", "");
replace(".", "");
replace(" ", "");
结果如下:
旧代码:1295
新代码:3524
2倍长!
任何想法,为什么replace和replaceAll是如此低效?我可以做些什么来加快速度吗?
编辑:感谢所有答案 - 主要问题确实是[,. ]*没有做我想做的事情.将其更改为[,. ]+几乎等于非基于正则表达式的解决方案的性能.使用预编译的正则表达式有所帮助,但是很少.(这是一个非常适用于我的问题的解决方案.
测试代码:
用正则表达式替换字符串:[,.]*
用正则表达式替换字符串:[,.] +
用正则表达式替换字符串:[,.] +和预编译模式