0

"<(><<)>"「<」に置き換えたいのですが、私の場合は置き換えられません。

public class Test2 {

public static void main(String[] args)
    {
        String s1 = "<(><<)>script>";

       if( s1.contains("<(><<)>"))
       {
        s1.replaceAll("<(><<)>","<");
         }


    System.out.println("completeText"+s1);

    }

}
4

2 に答える 2

2

その理由は

  • の最初のパラメーターreplaceAllは正規表現です。これは、一部の文字をエスケープする必要があることを意味します。
  • 結果を取得する必要があります (文字列は不変であるため、replaceAll渡した文字列は変更されませんが、新しい文字列が作成されます)

使用する

 s1 = s1.replaceAll("<\\(><<\\)>","<");

テストする必要がないことにも注意してくださいif( s1.contains("<(><<)>"))。これは役に立たない条件を追加し、replaceAll十分に高速です。

于 2012-11-15T07:46:37.757 に答える
1

String.replaceAllメソッドは最初のパラメータを。として受け取りますRegex。したがって、をエスケープする必要があります。これは()で特別な意味を持ちますRegex

または、メソッドを使用Pattern.quoteして特殊文字をエスケープすることもできます。return valueまた、のreplaceAllメソッドをに保存する必要がありますstring s1StringsJavaでは不変であるため、呼び出すStringクラスのメソッドはすべて、を返しますmodified string。戻り値を使用する必要があります。そうしないと、変更が表示されません。

したがって、次のようにコードを変更する必要があります。-

s1 = s1.replaceAll(java.util.regex.Pattern.quote("<(><<)>"),"<");

文字列に存在する場合は自動的に置き換えpatternられ、存在しない場合は変更されていない文字列が返されます。

于 2012-11-15T07:50:06.950 に答える