当编写带有查找和替换功能的文本编辑器时,用户可以搜索多次然后进行替换。在Java中,搜索部分非常容易:
Pattern pattern = Pattern.compile(userInput);
...
String line = ...
Matcher matcher = pattern.matcher(line);
int from = 0;
while (from < line.length() && matcher.find(from)) {
int start = matcher.start();
int length = matcher.end() - start;
// pseudo-code:
if (askUser()) {
return ...
}
from = start + 1;
}
但如何处理第n个匹配项的替换呢?Matcher有replaceAll和replaceFirst。显然,第一个方法不合适,而对于replaceFirst,文档中说:
“用给定的替换字符串替换输入序列中与模式匹配的第一个子序列。 此方法首先重置此匹配器。然后,它扫描输入序列,查找模式的匹配项。”
其中粗体句子让我担心它是否适用于这里。我需要一些东西来用特定的模式替换当前的匹配项。
yourReplacement
中的正则表达式语法,对吗? - Thomas S.m.group(1)
来创建一个由匹配组成的替换字符串,比如\1
很类似。 - Sweeper