テキストの各単語の後に、指定された部分文字列で終わる 指定された単語を挿入する必要があります。私のコードはある程度機能します。 StringBuilderオブジェクトを反復処理します。ご覧のように、最後の2つのケースでは、「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をfregiently使っていますか?あなたは を知っていますかCanelo 232 Pavelo 232 magenta ravelo 232 sagenta! lolita kalo 232 la lalilo lalita 333l lo。
期待出力は次のようになります。
こんにちは232ミスタージェームズ!あなたはtrello 232をfregiently使っていますか?あなたは を知っていますかCanelo 232 Pavelo 232 magenta ravelo 232 sagenta!ロリータ kalola lalilo 232 lalita 333l lo。あなたはwhileループで繰り返し処理するのではなく、String.replaceAllを使用することができますコメントで述べたように
whileループではなくreplaceAllを使用するのはなぜですか? – CAustin
[あなたの正規表現は正常です](https://regex101.com/r/Fro6Uo/1)、あなたのロジックはそうではありません。 @CAustinが述べたように、replaceAllを使用してください。 – ctwheels