我需要在每个单词后面加上一个给定的子字符串,
插入指定的单词。我的代码在某种程度上可以正常工作,我认为在迭代它时修改StringBuilder对象不是一个好主意。如您所见,在最后两种情况下,“ kalola”和“ lalilo”失败。非常感谢!
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TextEditor {
public static void main(String[] args) {
String text = "Hello Mister James! Do you use trello fregiently? "
+ "Do you know Canelo Pavelo magenta ravelo sagenta! "
+ "lolita kalola lalilo lalita 333l lo.";
String regex = "\\b\\w+lo\\b";
String word = " 232 ";
StringBuilder copyOfText = new StringBuilder(text);
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(copyOfText);
while(matcher.find()) {
copyOfText.insert(matcher.end(), word);
}
//text = copyOfText.toString();
System.out.println(copyOfText);
}
}
收到的输出是:
232詹姆斯先生您好!您经常使用trello 232吗?你呢
知道Canelo 232 Pavelo 232洋红色ravelo 232 sagenta!洛丽塔·卡洛
232 la lalilo lalita 333l lo。
预期输出为:
232詹姆斯先生您好!您经常使用trello 232吗?你呢
知道Canelo 232 Pavelo 232洋红色ravelo 232 sagenta!洛丽塔
Kalola Lalilo 232拉莉塔333l lo。
最佳答案
如注释中所述,您可以使用String.replaceAll而不是使用while循环进行迭代:
String text = "Hello Mister James! Do you use trello fregiently? "
+ "Do you know Canelo Pavelo magenta ravelo sagenta! "
+ "lolita kalola lalilo lalita 333l lo.";
String word = "232";
System.out.println(text.replaceAll("(\\w+lo\\b)", "$1 " + word));
输出:
232詹姆斯先生您好!您经常使用trello 232吗?你知道吗
Canelo 232 Pavelo 232洋红色ravelo 232 sagenta!洛丽塔·卡洛拉·拉利洛
232拉莉塔333l lo。