我了解到 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
时在非常热的循环中,是否有必要考虑使用 Pattern
和 Matcher
直接类,这有助于提高性能。
链接的教程站点似乎有问题(并且有很多,这就是为什么您应该小心阅读的内容)。一方面,它比较 replaceAll
使用写得不好的手动替换方法(这就是为什么你会得到秒与毫秒的差异)。然后在此基础上得出结论。
所以链接中的结果背后没有优化机制。结果背后的原因是编写得很糟糕的手动替换方法,它连接了很多字符串,与 replaceAll
相比速度较慢。 .
关于java - 为什么 String 的 replaceAll() 方法第一次性能成本高,下一次速度更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60396443/