2011-12-13 14 views
19

私は、文字列を持っていると私はreplaceAllメソッドを実行しようとすると、私はこの奇妙なエラーになっています:Java String 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 { 

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

答えて

32

{は、範囲の繰り返しとして{min,max}として使用される正規表現のメタ文字です。あなたは\\とそれに先行することによってそれをエスケープする必要がリテラル{に一致するように:

str = str.replaceAll("\\{", "\n"); // does work 
+0

多分コメントを変更するかもしれません:) –

+0

@KublaiKhan::) – codaddict

+0

@codeaddict – Johnydep

5
はそれをエスケープ

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

replaceAll()への最初の引数がregular expressionで、{は(それが繰り返しオペレータ、したがって、エラーメッセージです)Javaの正規表現で特別な意味を持っているので、これが必要とされています。

+0

ありがとうございました – Johnydep

11

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

StringCharSequenceを実装していますので、.replace("{", "\n")となります。

+0

はい私は知っているが、私はすべての出現を置き換えたいと思った。 – Johnydep

+1

私が言ったように、 '.replace()' *はその名前にもかかわらずすべての出現を置き換える! – fge

関連する問題