2011-08-26 13 views
9

Tiene dificultades para reemplazar una cita con una comilla escapada. Tengo una cadena que tiene el valor de la barra 'Foo' 'foobar', y estoy tratando de reemplazar las comillas de la barra con comillas escapadas, y no está funcionando. Me estoy volviendo loco.Java String.replaceAll no reemplaza una cita con la comilla escapada

s=s.replaceAll("\"","\\\""); 

yo esperaría s tener el valor de 'foo \ "barra \" foobar', pero no es así. ¿Alguna ayuda?

Respuesta

19

replaceAll utiliza expresiones regulares, en las que la barra invertida simplemente escapa al carácter siguiente, incluso en el reemplazo.

Uso replace en vez y está bien ... o se puede doblar la barra invertida en el segundo argumento si desea utilizar la forma de expresiones regulares:

String after = before.replaceAll("\"", "\\\\\""); 

Esto podría ser útil si se necesita para que coincida con el ingrese usando expresiones regulares, pero recomiendo usar el formulario no-regex a menos que realmente necesite comportamiento de expresiones regulares.

personalmente creo que fue un error de los métodos de String utilizar expresiones regulares para comenzar con - cosas como foo.split(".") que será dividido en todos los personajes y no en períodos, de forma totalmente inesperada para el desarrollador incautos.

+3

+1, para el 'split ("")'. Odio esto ... –

9

Utilice s = s.replace("\"", "\\\"");, que es la versión no regex.

1
s=s.replaceAll("\"","\\\\\""); 

Pero realmente debería ir con replace(...) como los demás aquí consejos.

1

Uso;

s=s.replaceAll("\"","\\\\\""); 
0

por favor, siga el siguiente programa y utilice> s.replace ("/"."//");

public class stringbackslash { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String s="\"; 
     s=s.replace("\", "\\"); 
     System.out.println(s); 

    } 

} 
2

Tiene que escapar tanto de reemplazar todos los argumentos porque son expresiones regulares!

@Test 
public void testReplace() { 
    assertEquals("foo\\\"bar\\\"", 
       "foo\"bar\"".replaceAll("\\\"", "\\\\\\\"")); 
} 

Así que si desea escribir " tiene que escapar la expresión regular ->\" sino porque usted está en java que necesita para escapar de la \ y " que Java, por lo que presentamos lo \\\\". (ese es el parámetro de búsqueda).

Para reemplazar el parámetro que desea tener \" -> en la expresión regular: \\\" -> en Java \\\\\\\"

+0

¡exactamente la explicación que pensé que faltaba arriba! Gracias – Engineiro

1
String str = "'Foo \"Bar\" Bar'"; 
System.out.println(str);   
System.out.println(str.replaceAll("\"", "\\\\\"")); 
Cuestiones relacionadas