JAVA replace 太多_java – String.replaceAll比自己完成工作慢得多

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

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

我用这一行替换了代码:replaceAll(“[,.] *”,“”);

我进行了一些比较性能测试.

当比较1,000,000次迭代时,我得到了这个:

Old Code: 1287ms

New Code: 4605ms

3倍长!

然后我尝试用3次调用替换它来代替:

replace(“,”,“”);

replace(“.”,“”);

replace(“”,“”);

结果如下:

Old Code: 1295

New Code: 3524

2倍长!

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

编辑:感谢所有答案 – 主要问题确实是[,. ] *没有做我想做的事.将其改为[,. ]几乎等于非基于正则表达式的解决方案的性能.

使用预编译的正则表达式有所帮助,但是很少. (这是一个非常适用于我的问题的解决方案.

解决方法:

虽然使用正则表达式可以产生一些性能影响,但它不应该那么糟糕.

请注意,每次调用时,使用String.replaceAll()都会编译正则表达式.

您可以通过显式使用Pattern对象来避免这种情况:

Pattern p = Pattern.compile("[,. ]+");

// repeat only the following part:

String output = p.matcher(input).replaceAll("");

另请注意,使用而不是*避免替换空字符串,因此也可能加快进程.

标签:java,string,regex,replace

来源: https://codeday.me/bug/20190926/1818374.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值