replaceAll() 関数の使用について質問があります。
文字列に括弧がペアになっている場合は、"" に置き換えます。
while(S.contains("()"))
{
S = S.replaceAll("\\(\\)", "");
}
しかし、なぜreplaceAll("\\(\\)", "");
使用する必要があるの\\(\\)
ですか?
これは、 andがreplaceAll
正規表現を期待しており、正規表現で特別な意味を持ち、エスケープする必要があるためです。(
)
代わりに を使用することもできますreplace
。これは直観に反して と同じことを行いreplaceAll
ますが、正規表現の代わりに文字列を入力として受け取ります。
S = S.replace("()", "");
まず、コードを次のものに置き換えることができます。
S = S.replace("()", "");
while
ループなし。
次に、 の最初の引数.replaceAll()
は正規表現であり、括弧は正規表現の特別なトークンです (これらはグループ化演算子です)。
また、すべての.replaceAll()
オカレンスを置換するため、ここではループも必要ありませんでした。Java 6 以降では、次のように記述することもできます。while
S = S.replaceAll("\\Q()\\E", "");
これは、何が何であるかに関する読者への演習として許可されてい\Q
ます\E
: http://regularexpressions.infoが答えを提供します;)
メソッドの最初の引数は正規表現であり、正規表現の()
特殊文字であるため、エスケープする必要があります。
括弧は正規表現の特殊文字であるため、エスケープする必要があります。Java で文字列のリテラルを取得する\
には、次のようにエスケープする必要があります\\
。
だから()
=> \(\)
=>\\(\\)