online - regular expression generator for java
¿El método ReplaceAll de String de Java da error de repetición ilegal? (3)
Tengo una cadena y cuando intento ejecutar el método replaceAll
, recibo este extraño error:
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 apariciones de "{"
?
A {
es un metacarácter de expresiones regulares utilizado para repeticiones de rango como {min,max}
. Para hacer coincidir un literal {
necesitas escapar de él precediéndolo con un //
:
str = str.replaceAll("//{", "/n"); // does work
Escápalo
str = str.replaceAll("//{", "/n");
Esto es necesario ya que el primer argumento para replaceAll()
es una expresión regular , y {
tiene un significado especial en las expresiones regulares de Java (es un operador de repetición , de ahí el mensaje de error).
Si realmente pretende reemplazar los caracteres individuales y no las expresiones regulares (que es lo que parece querer hacer aquí), debe usar .replace()
, no .replaceAll()
. A pesar de su nombre, .replace()
reemplazará TODAS las ocurrencias, no solo la primera.
Y en caso de que te preguntes, String
implementa CharSequence
, así que .replace("{", "/n")
funcionará.