我在一些我想优化的代码中发现了这一点。
这是片段:
tempString = bigBuffer.replaceAll("\\n", "");
tempString = tempString.replaceAll("\\t", "");
然后我决定明智地使用正则表达式,我这样做了:
tempString = bigBuffer.replaceAll("[\\n\\t]", "");
然后一位 friend 告诉我改为这样做:
tempString = bigBuffer.replaceAll("\\n|\\t", "");
因为我想知道更改的结果,所以我做了一个测试来验证它是否是一个好的优化。因此,(java 版本“1.6.0_27”)的结果是第一个代码是引用 100%。
使用管道是 121%,因此执行任务需要更多时间。
对于方括号,它是 52%,因此执行任务花费的时间更少。
为什么正则表达式在本应相同的地方表现不同?
马丁
最佳答案
第一个代码片段遍历 bigBuffer 两次,第一次替换新行,第二次替换制表符。
第二个代码片段只搜索 bigBuffer 一次,检查每个字符是一个还是另一个。这将导致速度只用一半的时间完成。
第三个代码片段可能编译得不好,导致第一个代码算法的版本特别糟糕,但如果不仔细检查正则表达式编译的路径,我不能肯定地说。
虽然在测试方面做得很好。相对时间(基于百分比)很有用,绝对时间(毫秒或类似时间)没有用。
关于java - 这是正常的 Java 正则表达式行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272970/