2013-02-23 45 views
5

Desidero modificare la barra rovesciata in una stringa per il doppio backslash.Sostituire la barra rovesciata con doppia barra rovesciata

ho

String path = "C:\Program Files\Text.txt"; 

e voglio cambiarlo in

"C:\\Program Files\\Text.txt" 
+7

non fa che dire errore di sintassi? –

+2

Usa sempre '/' invece di \\ per i percorsi del file system, poiché '/' è indipendente dal sistema operativo. –

+0

Non hai (1), perché non si compila: quindi non hai il problema di convertirlo in (2). Quello che probabilmente hai è una stringa che contiene singoli backslash, derivati ​​non da un letterale, ma da parte dell'utente, che è già utilizzabile così com'è. I doppi backslash sono richiesti solo per i letterali stringa e vengono convertiti in singolo dal compilatore. Non hai questo problema. Non è una vera domanda. – EJP

risposta

13

replaceAll sta usando espressioni regolari, e dal momento che non c'è bisogno di usare regex qui semplicemente uso

path = path.replace("\\", "\\\\"); 

\ è speciale in stringhe letterali. Ad esempio può essere utilizzato per

  • creare caratteri speciali come scheda \t, separatori di linea \n\r,
  • o scrivere caratteri usando la notazione come \uXXXX (dove X è il valore esadecimale e XXXX rappresenta la posizione del carattere in Unicode Tavolo).

di sfuggire (e creare \ carattere) abbiamo bisogno di aggiungere un altro \ prima di esso.
Quindi la stringa letterale che rappresenta il carattere \ si presenta come "\\". La stringa che rappresenta due caratteri \ assomiglia a "\\\\".

+0

Buona spiegazione. – misty

8

Utilizzando String#replace()

String s= "C:\\Program Files\\Text.text"; 
System.out.println(s.replace("\\", "\\\\")); 
+0

Ricevo errore come "Eccezione nella discussione" AWT-EventQueue-0 "java.util.regex.PatternSyntaxException: Errore interno imprevisto vicino all'indice 1" – user2060390

+2

@ user2060390 probabilmente si sta utilizzando replaceAll. non hai davvero bisogno di una soluzione regex qui basta usare replace() che si aspetta una stringa e una stringa di sostituzione. – PermGenError

+1

'System.out.println (s.replaceAll (" \\\\ "," \\\\\\\\\ "));' funzionerebbe se si desidera utilizzare 'replaceAll'. – Dukeling

Problemi correlati