2011-12-13 7 views
19

que tienen una cadena y cuando trato de ejecutar el método replaceAll, estoy consiguiendo este error extraño:Java String Replace ¿Todo el método que da error de repetición ilegal?

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

y me sale un error extraño:

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

¿Cómo puedo reemplazar las ocurrencias de "{"?

Respuesta

32

A { es un meta-carácter regex utilizado para repeticiones de rango como {min,max}. Para que coincida con un literal { tiene que escapar por lo precede con un \\:

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

Quizás cambie el comentario también :) –

+0

@KublaiKhan: :) – codaddict

+0

@codaddict, gracias – Johnydep

5

Escápelo:

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

Esto es necesario ya que el primer argumento de replaceAll() es un regular expression y { tiene un significado especial en las expresiones regulares de Java (que es una repetición operador , por lo tanto, el mensaje de error) .

+0

muchas gracias – Johnydep

11

Si realmente la intención de reemplazar los caracteres individuales y no en expresiones regulares (que es lo que parece querer hacer aquí), que debiera use .replace(), no .replaceAll(). A pesar de su nombre, .replace() reemplazará TODAS las ocurrencias, no solo la primera.

Y en caso de que se pregunte, String implementa CharSequence, entonces .replace("{", "\n") funcionará.

+0

sí lo sé, pero quería reemplazar todas las ocurrencias – Johnydep

+1

Como dije, '.replace()' * * reemplazará * todas las ocurrencias a pesar de su nombre! – fge

Cuestiones relacionadas