1

文字列がある場合例:

String s = "This is a string";

そして今、私はこのアクションを実行します:

s = s.replaceAll("This","What");

s="文字列とは"で動作します

結構ですが、式が一致しなかった場合:

s = s.replaceAll("junk","What");

sは以前の状態のままです。s = "This is a string";


これらの文字列を同一視せずに、s.replaceAllが実際に何らかのアクションを実行したかどうかを知る方法はありますか?

4

3 に答える 3

4

やってみても大丈夫ですか

if(s.contains("junk")) 
  s.replaceAll("junk", "What"); 
else 
  //you know it hasn't executed!
于 2012-10-05T13:32:41.220 に答える
1

を使用する以外の方法があるかどうかを尋ねていますか?s.equals(...)答えはありません。

javadocはreplaceAll、文字が変更されていない場合にターゲットオブジェクトを返すことを示していないため、変更された場合でも、実装の詳細として扱う必要があります。つまり、携帯性を気にする場合は、ショートカットとして使用し== ないでください。


もちろん、一致正規表現が元の文字列と一致するかどうかをテストし、それを使用して置換が実行されたかどうかを判断できます。ただし、置換が行われたことがわかっていても、置換アクションによって実際に文字列が変更されたかどうかはわかりません。(そして、それを判断するのは難しいです...置換文字列にグループ参照が含まれている場合を考慮する必要がある場合。)

于 2012-10-05T13:33:52.913 に答える
0

画面の裏側で使用するため、いくつかの方法を使用replaceAllして、置換が発生するかどうかを確認できます。しかし、それは本当にあなたがそれをどのように使いたいかによります。そもそも文字列を比較してみませんか?Pattern.compile(regex).matcher(str).replaceAll(repl)Matcher

于 2012-10-05T13:34:19.590 に答える