我在一些我想优化的代码中发现了这一点。
摘录如下:

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中搜索一次,以检查每个字符是一个还是另一个。这将导致速度仅在一半时间内完成。

排在第三位的代码片段可能编译不佳,并导致第一个代码算法的版本特别糟糕,尽管我不能肯定地说,如果不仔细检查正则表达式编译的路径。

尽管在测试方面做得很好。相对定时(基于百分比)很有用,而绝对定时(毫秒或类似时间)则没有用。

10-01 13:25