我需要在每个单词后面加上一个给定的子字符串,
插入指定的单词。我的代码在某种程度上可以正常工作,我认为在迭代它时修改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。

08-27 03:45