web-dev-qa-db-ja.com

Java String ReplaceAllメソッドが不正な繰り返しエラーを出しますか?

文字列があり、replaceAllメソッドを実行しようとすると、次の奇妙なエラーが発生します。

String str = "something { } , op";
str = str.replaceAll("o", "\n"); // it works fine
str = str.replaceAll("{", "\n"); // does not work

そして私は奇妙なエラーを受け取ります:

Exception in thread "main" Java.util.regex.PatternSyntaxException:
Illegal repetition {  

"{"のオカレンスを置き換えるにはどうすればよいですか?

25
Johnydep

{は、{min,max}として範囲の繰り返しに使用される正規表現メタ文字です。リテラル{と一致させるには、その前に\\を付けてエスケープする必要があります。

str = str.replaceAll("\\{", "\n"); // does work
40
codaddict

正規表現ではなく単一の文字を本当に置き換える場合(ここで実行したいようです)は、.replace()ではなく.replaceAll()を使用する必要があります。その名前にもかかわらず、.replace()は、最初のオカレンスだけでなく、すべてのオカレンスを置き換えます。

また、不思議に思うかもしれませんが、StringCharSequenceを実装しているので、.replace("{", "\n")は機能します。

17
fge

エスケープする:

_str = str.replaceAll("\\{", "\n"); 
_

replaceAll() の最初の引数は 正規表現 であり、_{_はJava正規表現(これはrepetition演算子であるため、エラーメッセージです)。

5
NPE