java - Java Matcher 仅搜索和替换一些匹配项
问题描述
我正在使用 Matcher、find、appendReplacement 和 appendTail 在 Java 中执行标准搜索和替换循环。我的问题是我有一个附加条件必须为真,以确定我是否应该实际进行替换或在特定匹配时保持字符串完整。
Pattern p = Pattern.compile("Some Regex");
Matcher m = p.matcher("Some buffer of text which needs some replacements.");
StringBuffer updatedBuffer = new StringBuffer();
while (m.find()) {
if (someCondition) {
m.appendReplacement(updatedBuffer, "Some Replacement");
}
else {
// leave the text unchanged at this point.
// is there something equivalent to: m.appendOriginal(updatedBuffer)
}
}
m.appendTail(updatedBuffer);
我可以通过使用该匹配的 end() 并从原始字符串中提取最后一个匹配的 end() 来计算这一点,但我认为可能有更有意的方法来做到这一点。谢谢你的帮助。
解决方案
StringBuffer updatedBuffer = new StringBuffer();
while (m.find()) {
m.appendReplacement(updatedBuffer,
someCondition ? "Some Replacement" : m.group());
}
m.appendTail(updatedBuffer);
或者
return Pattern.compile("Some Regex")
.matcher("Some buffer of text which needs some replacements.")
.replaceAll(mr -> condition ? "Some Replacement" : mr.group());
其中 mr 是类似于匹配器方法的 MatchResult。