java - 这是正常的 Java 正则表达式行为吗?

标签 java regex


我在一些我想优化的代码中发现了这一点。 这是片段:

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/

相关文章:

regex - Python 正则表达式非贪婪匹配

regex - Mod重写正则表达式负前瞻

regex - 如何排除第一组的单个字符被匹配到第二组?

java - 如何通过套接字发送图像对象...?

javascript - 第一个和最后一个引号之间的匹配字符串

javascript - 数字的正则表达式仅允许空格和 1 个逗号或点

java - Java 中不使用数组的排列

java - 数组元素,排列和识别元素

java - 在 opengl 和自己的库中传递 vector (和其他结构)

java - 多项式数组表示无法正常工作