java - 为什么 String 的 replaceAll() 方法第一次性能成本高,下一次速度更快?

标签 java regex string optimization

我了解到 String's replaceAll()方法将正则表达式作为输入参数,它会导致相当大的性能影响。但有一次,我读到了这个 blog用一个小程序断言(根据我的理解):

Process the replaceAll() method slow for the first time but faster for the next time.



这是测试结果:
regex replace time taken: 14.09 milliseconds
manual replace time taken: 2.371 seconds
-----
regex replace time taken: 9.498 milliseconds
manual replace time taken: 2.406 seconds
-----
regex replace time taken: 2.184 milliseconds
manual replace time taken: 2.360 seconds
-----

这个结果背后的优化机制是什么?

最佳答案

通常它不会造成有意义的性能影响,除非以奇怪和不寻常的方式使用。在正常的用例中(比如网络请求),它会在网络延迟和其他需要更多时间的事情下消失。仅当您使用 replaceAll 时在非常热的循环中,是否有必要考虑使用 PatternMatcher直接类,这有助于提高性能。

链接的教程站点似乎有问题(并且有很多,这就是为什么您应该小心阅读的内容)。一方面,它比较 replaceAll使用写得不好的手动替换方法(这就是为什么你会得到秒与毫秒的差异)。然后在此基础上得出结论。

所以链接中的结果背后没有优化机制。结果背后的原因是编写得很糟糕的手动替换方法,它连接了很多字符串,与 replaceAll 相比速度较慢。 .

关于java - 为什么 String 的 replaceAll() 方法第一次性能成本高,下一次速度更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60396443/

相关文章:

.net - 前面匹配域名和获取视频 ID 时出现问题

python - 如果Python中存在分隔符,如何提取字符串

java - 使用 split ("|"通过管道符号拆分 Java 字符串)

java - Android LiveData,无法创建类viewModel的实例

java - 如何将 JKS 转换为 Docker 注册表证书/ key ?

java - 属性文件未按正确顺序存储

MySQL REGEXP 语句不应该返回 true?

regex - 在 R 中使用 gsub 删除一对括号内的任何内容

c - 字符串、请求和存储

java - 尝试使用 jersey 和 jaxb 时出现异常