相关疑难解决方法(0)

String.replaceAll比自己完成工作慢得多

我有一段旧代码,用于在字符串中执行查找和替换标记.

它接收映射fromto对,迭代它们,对于每个对,迭代目标字符串,查找from使用indexOf(),并用值替换它to.它完成了a的所有工作StringBuffer并最终返回a String.

我用这一行替换了代码:replaceAll("[,. ]*", "");
我运行了一些比较性能测试.
比较1,000,000迭代时,我得到了这个:

旧代码:1287ms
新代码:4605ms

3倍长!

然后我尝试用3次调用替换它replace:
replace(",", "");
replace(".", "");
replace(" ", "");

结果如下:

旧代码:1295
新代码:3524

2倍长!

任何想法,为什么replacereplaceAll是如此低效?我可以做些什么来加快速度吗?


编辑:感谢所有答案 - 主要问题确实是[,. ]*没有做我想做的事情.将其更改为[,. ]+几乎等于非基于正则表达式的解决方案的性能.使用预编译的正则表达式有所帮助,但是很少.(这是一个非常适用于我的问题的解决方案.

测试代码:
用正则表达式替换字符串:[,.]*
用正则表达式替换字符串:[,.] +
用正则表达式替换字符串:[,.] +和预编译模式

java regex string replace

25
推荐指数
2
解决办法
3万
查看次数

标签 统计

java ×1

regex ×1

replace ×1

string ×1