我需要在文本的每个单词之后,以给定的子字符串结尾, 插入指定的单词。我的代码在某种程度上起作用,我认为在迭代它时修改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 magenta ravelo 232 sagenta! lolita kalo 232 la lalilo lalita 333l lo。
预期输出为:
你好232詹姆斯先生!你是否经常使用trello 232?你呢 知道Canelo 232 Pavelo 232 magenta ravelo 232 sagenta!洛丽塔 kalola lalilo 232 lalita 333l lo。
答案 0 :(得分:1)
如评论中所述,您可以使用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 magenta ravelo 232 sagenta! lolita kalola lalilo 232 lalita 333l lo。