1

テキストがあり、特定のインデックスのテキストに単語を含めたいです。新しい単語を含める必要があるテキストのインデックスを見つけることができました。ただし、そのインデックスを埋め込みプロセスに使用する方法が見つかりません。次のように置換機能を使用しようとしました:

newSentence = oldSentence.replace(oldWord, (oldWord+" "+newWord));

問題は、特定のインデックスの単語のみを変更したいのに、このメソッドが oldWord のすべての出現を置き換えることです。

提案をいただければ幸いです

4

4 に答える 4

2

使用できますStringBuilder#replace()String次のように、与えられたの一部を置き換えることができます。

StringBuilder sb = new StringBuilder(oldSentence);
sb.replace(wordPos, newWord.length()-1, newWord);
newSentence = sb.toString();

javadocから:

public StringBuilder replace(int start,
                    int end,
                    String str)

このシーケンスのサブストリング内の文字を、指定された String 内の文字に置き換えます。部分文字列は、指定された start から始まり、インデックス end - 1 の文字まで、またはそのような文字が存在しない場合はシーケンスの最後まで拡張されます。最初に部分文字列の文字が削除され、次に指定された文字列が最初に挿入されます。(このシーケンスは、必要に応じて、指定された文字列に対応するために長くなります。)

于 2013-05-23T23:39:16.807 に答える
1

Java では、文字列の内容を変更することはできません。

置換する単語の前のテキストと単語の後のテキストを抽出し、新しい文字列で 3 つすべて (前、単語、後) を連結して、新しいものを作成する必要があります。StringBuilderライブラリクラスを見てください。

StringBuilder buf = new StringBuilder();
buf.append(oldSentence.substring(0,wordPos));
buf.append(newWord);
buf.append(oldSentence.substring(wordPos+oldWordLength));
于 2013-05-23T23:30:06.087 に答える
1
oldWord.substring(0, index) + embeddedText + oldWord.substring(index);

これは、インデックス値が、テキストを埋め込みたい n 番目の文字であると想定しています。

于 2013-05-23T23:31:31.747 に答える
1

を使用できますreplaceFirst()が、安全のために、「単語」にドットなどの正規表現文字が含まれている場合は、テキストを正規表現の引用符で囲まれた文字列に変換する必要があります。

newSentence = oldSentence.replaceFirst(Pattern.quote(oldWord), oldWord+" "+newWord);

または、もう少し「正規表現」を使用して、wird を後読みに変えます。

newSentence = oldSentence.replaceFirst("(?<="Pattern.quote(oldWord)+")", " "+newWord);
于 2013-05-23T23:39:18.603 に答える