2011-08-26 16 views

risposta

19

replaceAll utilizza le espressioni regolari - in cui il backslash sfugge semplicemente al carattere successivo, anche nella sostituzione.

Usa replace, invece, e va bene ... o si può raddoppiare la barra rovesciata nel secondo argomento, se si desidera utilizzare il modulo espressione regolare:

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

Questo potrebbe essere utile se è necessario far corrispondere la input usando le espressioni regolari, ma consiglio vivamente di usare il modulo non-regex a meno che tu in effetti non sia il comportamento di espressione regolare.

personalmente penso che sia stato un errore per i metodi in String utilizzare le espressioni regolari per cominciare - le cose come foo.split("."), che si dividerà in ogni personaggio piuttosto che su periodi, del tutto inaspettatamente allo sviluppatore incauti.

+3

+1, per il 'split ("")'. Odio questo ... –

9

Utilizzare s = s.replace("\"", "\\\"");, che è la versione non regex.

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

Ma si dovrebbe davvero andare con replace(...) come gli altri consigli qui.

1

Utilizzo;

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

si prega di seguire il seguente programma e utilizzare> 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

È necessario uscire entrambi sostituire tutti gli argomenti perché sono espressioni regolari!

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

Quindi, se si vuole scrivere " avete bisogno di sfuggire l'espressione regolare ->\" ma perché siete in Java è necessario per sfuggire alla \ e " per Java per, in modo da ottenere \\\\". (questo è il parametro di ricerca).

Per il parametro di sostituzione che si desidera avere \" -> in regex: \\\" -> in Java \\\\\\\"

+0

esattamente la spiegazione che pensavo mancasse sopra! Grazie – Engineiro

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