0

replaceAll() 関数の使用について質問があります。

文字列に括弧がペアになっている場合は、"" に置き換えます。

while(S.contains("()"))
        {
            S = S.replaceAll("\\(\\)", "");
        }

しかし、なぜreplaceAll("\\(\\)", "");使用する必要があるの\\(\\)ですか?

4

6 に答える 6

2

javadocsに記載されているように、引数は正規表現です。

正規表現の括弧はグループ化に使用されます。正規表現の一部として括弧を一致させる場合は、エスケープする必要があります。

于 2013-01-13T19:15:44.630 に答える
1

これは、 andがreplaceAll正規表現を期待しており、正規表現で特別な意味を持ち、エスケープする必要があるためです。()

代わりに を使用することもできますreplace。これは直観に反して と同じことを行いreplaceAllますが、正規表現の代わりに文字列を入力として受け取ります。

S = S.replace("()", "");
于 2013-01-13T19:15:58.267 に答える
1

まず、コードを次のものに置き換えることができます。

S = S.replace("()", "");

whileループなし。

次に、 の最初の引数.replaceAll()は正規表現であり、括弧は正規表現の特別なトークンです (これらはグループ化演算子です)。

また、すべての.replaceAll()オカレンスを置換するため、ここではループも必要ありませんでした。Java 6 以降では、次のように記述することもできます。while

S = S.replaceAll("\\Q()\\E", "");

これは、何が何であるかに関する読者への演習として許可されてい\Qます\E: http://regularexpressions.infoが答えを提供します;)

于 2013-01-13T19:16:19.437 に答える
0

メソッドの最初の引数は正規表現であり、正規表現の()特殊文字であるため、エスケープする必要があります。

于 2013-01-13T19:16:24.863 に答える
0

括弧は正規表現の特殊文字であるため、エスケープする必要があります。Java で文字列のリテラルを取得する\には、次のようにエスケープする必要があります\\

だから()=> \(\)=>\\(\\)

于 2013-01-13T19:16:29.277 に答える