1

テキスト内のいくつかの単語を置き換える必要がありますが、次のように置換戦略に条件を入れる必要があります。

word1word2に置き換えたい:

String word1 = "word1";
String word2 = "word2";

しかし、次のようなword3が前にある場合、word1を置き換えたくありません。

String word3 = "word3."; //with the dot at the ending

つまり、テキストがword3.word1の場合は、触れたくありません。しかし、 Stringのメソッドを使用して単語境界でそれを処理できないようです。replaceAll

編集:

また、word1に「-」文字の接頭辞または接尾辞がある場合、つまり-word1またはword1-または-word1-を変更したくありません

どんな助けもかなりのものです。

4

4 に答える 4

5

否定後読みで正規表現を使用します。(?<!word3\\.)word1

于 2012-03-21T11:07:31.943 に答える
1

次のシナリオを想定しています

String word1 = "word1";
String word2 = "word2";
String word3 = "word3";
String mysentence = "word3.myname.word1";

プログラム的にあなたはこれが好きです

int word1loc = mysentence.indexOf(word1);
int word2loc = mysentence.indexOf(word2);
int word3loc = mysentence.indexOf(word3);

if (word1loc> word3loc){
mysentence.replaceAll(word1,word2);
}

私はそれがあなたを助けるかもしれないと信じています...!

于 2012-03-21T11:12:33.960 に答える
1

word3 が前にある場合、word1 を置き換えたくありません。

否定の後読みを使用する必要があります。

おそらく使用したい単語をハードコーディングしたくない場合を除きますPattern.quote

コード例を次に示します。

String word1 = "word1";
String word2 = "word2";
String word3 = "word3.";

String regex = String.format("(?<!%s)%s", Pattern.quote(word3),
                                          Pattern.quote(word1));

String input = "aaa word1 bbb word3.word1 ccc";

String result = input.replaceAll(regex, word2);

System.out.println(result);

出力:

aaa word2 bbb word3.word1 ccc

(最初word1は置き換えられますが、2 番目word1は が前にあるため置き換えられませんword3.)

于 2012-03-21T11:04:49.857 に答える
1

これがヒントになると思います

String str = "word3.word1.word2.word1";
str.replaceAll("word3.word1", "word3.wordX1").replaceAll("word1", "word2").replaceAll("wordX1", "word1");
于 2012-03-21T11:21:44.387 に答える