我正在使用 Java 中的正则表达式进行一些相当广泛的字符串操作。目前,我有许多看起来像这样的代码块:
Matcher m = Pattern.compile("some pattern").matcher(text);
StringBuilder b = new StringBuilder();
int prevMatchIx = 0;
while (m.find()) {
b.append(text.substring(prevMatchIx, m.start()));
String matchingText = m.group(); //sometimes group(n)
//manipulate the matching text
b.append(matchingText);
prevMatchIx = m.end();
}
text = b.toString()+text.substring(prevMatchIx);
我的问题是这两种选择中哪一种更有效(主要是时间,但在某种程度上是空间):
1) 保留上面的许多现有 block (假设没有更好的方法来处理这些 block ——我不能使用简单的 replaceAll()
因为必须对组进行操作).
2) 将 block 合并为一个大块。使用 “some pattern”
,它是使用 |/alternation 运算符组合所有旧 block 的模式。然后,在循环中使用 if/else if 来处理每个匹配模式。
感谢您的帮助!
最佳答案
如果进行替换的顺序很重要,则在使用技巧 #1 时必须小心。请允许我举个例子:如果我想格式化一个字符串使其适合包含在 XML 中,我必须首先替换所有 &
与 &
然后然后进行其他替换(例如 <
到 <
)。使用技巧 #2,您不必担心这一点,因为您是一次性完成所有替换。
就性能而言,我认为 #2 会更快,因为您将执行更少的字符串连接。与往常一样,您可以实现这两种技术并记录它们的速度和内存消耗,以便确定。 :)
关于java - Java 中的正则表达式性能——复杂的少还是简单的多好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3313972/