【发布时间】:2017-06-20 05:13:25
【问题描述】:
我有以下课程。
public class TestStringRegex {
public static void main(String[] args) {
StringBuilder text = new StringBuilder("KALAKA");
String wordToFind = "KA";
Pattern word = Pattern.compile(wordToFind);
Matcher match = word.matcher(text);
while (match.find()) {
System.out.println(match.end());
text=text.insert(match.end(),"INSERT");
}
System.out.println(text);
}
期望输出为 KAINSERTLAKAINSERT。 但是得到KAINSERTLAKA。 匹配器/插入是否适用于输入文本的长度?如何获得所需的输出。
【问题讨论】:
-
试试
"KALAKA".replaceAll("KA", "$0INSERT") -
我会避免在
StringBuilder上重复使用匹配器,同时修改StringBuilder。除非您有 javadoc 说这会起作用,或者确切地解释了行为是什么,否则我认为您根本不能指望它的行为是可预测的。如果您遇到无法使用replaceAll的复杂情况,我的选择是创建一个列表,您可以在其中收集计划的编辑,然后在找到所有匹配项后查看此列表。 -
就目前情况而言,我无法弄清楚为什么您的代码不起作用而 Mritunjay 的答案起作用。我没有看到任何关于该行为的 javadoc。我可能需要深入研究
Matcher代码才能弄清楚。 -
我们是否需要在循环中也设置区域
标签: java regex string stringbuilder