【发布时间】:2012-12-16 14:37:29
【问题描述】:
我正在尝试遍历字符串并替换正则表达式匹配字符串的所有实例。出于某种原因,当我使用if 时,它将起作用并仅替换正则表达式匹配的一个字符串实例。当我将 if 更改为 while 时,它会对其自身进行一些奇怪的替换,并在第一个正则表达式匹配的字符串上弄得一团糟,甚至没有触及其他字符串......
pattern = Pattern.compile(regex);
matcher = pattern.matcher(docToProcess);
while (matcher.find()) {
start = matcher.start();
end = matcher.end();
match = docToProcess.substring(start, end);
stringBuilder.replace(start, end, createRef(match));
docToProcess = stringBuilder.toString();
}
【问题讨论】:
-
您是否尝试过通过在循环中添加一些系统输出来进行调试?另请注意,
docToProcess = stringBuilder.toString();不会更改匹配器看到的字符串。 -
如何让它改变匹配器看到的字符串?因为这实际上是问题所在......我不知道如何更新它/刷新它/更改为当前实例
-
你不能。但是您可以创建一个新的匹配器并将其分配给您现有的局部变量:
matcher = pattern.matcher(docToProcess); -
String newString = oldString.replaceAll(regex,replacement)不是你想做的吗? -
@Pshemo 我不这么认为,因为他的替换是由
createRef()动态创建的。由于我们不知道正则表达式,我们不能确定匹配总是相等的。