文字列があり、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 {
"{"
のオカレンスを置き換えるにはどうすればよいですか?
{
は、{min,max}
として範囲の繰り返しに使用される正規表現メタ文字です。リテラル{
と一致させるには、その前に\\
を付けてエスケープする必要があります。
str = str.replaceAll("\\{", "\n"); // does work
正規表現ではなく単一の文字を本当に置き換える場合(ここで実行したいようです)は、.replace()
ではなく.replaceAll()
を使用する必要があります。その名前にもかかわらず、.replace()
は、最初のオカレンスだけでなく、すべてのオカレンスを置き換えます。
また、不思議に思うかもしれませんが、String
はCharSequence
を実装しているので、.replace("{", "\n")
は機能します。
エスケープする:
_str = str.replaceAll("\\{", "\n");
_
replaceAll()
の最初の引数は 正規表現 であり、_{
_はJava正規表現(これはrepetition演算子であるため、エラーメッセージです)。