26

文字列があり、メソッドを実行しようとすると、次の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 {  

の発生をどのように置き換えることができ"{"ますか?

4

3 に答える 3

42

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

str = str.replaceAll("\\{", "\n"); // does work
于 2011-12-13T14:48:38.160 に答える
19

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

そして、不思議に思うかもしれませんが、String実装CharSequenceしているので、.replace("{", "\n")動作します。

于 2011-12-13T14:52:31.997 に答える
6

エスケープする:

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

これは、の最初の引数replaceAll()正規表現であり{、Java正規表現では特別な意味を持つために必要です(これは繰り返し演算子であるため、エラーメッセージです)。

于 2011-12-13T14:48:20.080 に答える