在以给定子字符串结尾的每个单词后插入一个单词

时间:2017-11-14 19:41:59

标签: java regex

我需要在文本的每个单词之后,以给定的子字符串结尾, 插入指定的单词。我的代码在某种程度上起作用,我认为在迭代它时修改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。

1 个答案:

答案 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。