2013-02-23 10 views
5

Chcę zmienić ukośnik odwrotny w ciągu znaków, aby podwójny ukośnik odwrotny.Zamień ukośnik odwrotny z podwójnym ukośnikiem odwrotnym

mam

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

i chcę go zmienić na

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

nie to mówi błąd składni? –

+2

Zawsze używaj '/' zamiast \\ dla ścieżek systemu plików, ponieważ '/' jest niezależne od systemu operacyjnego. –

+0

Nie masz (1), ponieważ nie kompiluje się: dlatego nie masz problemu z konwersją do (2). Najprawdopodobniej masz ciąg znaków, który zawiera pojedyncze ukośniki odwrotne, pochodzące nie z literału, ale od użytkownika, który jest już użyteczny, jak jest. Podwójne ukośniki odwrotne są wymagane tylko w przypadku literałów łańcuchowych i są konwertowane na pojedyncze przez kompilator. Nie masz tego problemu. To nie jest prawdziwe pytanie. – EJP

Odpowiedz

13

replaceAll używa wyrażenia regularnego, a ponieważ nie trzeba używać regex tutaj wystarczy użyć

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

\ jest specjalny w literałach ciągów. Na przykład może on być stosowany do

  • tworzenia znaków specjalnych takich jak zakładki \t, separatory linii \n\r,
  • lub do zapisu znaków za pomocą notacji jak \uXXXX (gdzie X jest wartość szesnastkowa i XXXX reprezentuje pozycję znaku w Unicode Stół).

Aby uciec przed nim (i utworzyć znak \) musimy przed nim dodać jeszcze jedną \.
Tak więc literał znaków reprezentujących znak \ wygląda jak "\\". Łańcuch reprezentujący dwie znaki \ wygląda jak "\\\\".

+0

Dobre wyjaśnienie. – misty

8

Korzystanie String#replace()

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

Otrzymuję błąd jako "wyjątek w wątku" AWT-EventQueue-0 "java.util.regex.PatternSyntaxException: nieoczekiwany błąd wewnętrzny w pobliżu indeksu 1" – user2060390

+2

@ user2060390 prawdopodobnie używasz replaceAll. tak naprawdę nie potrzebujesz rozwiązania regex tutaj po prostu użyj replace(), który oczekuje ciągu i zastępczego łańcucha. – PermGenError

+1

'System.out.println (s.replaceAll (" \\\\ "," \\\\\\\\ "));' działałoby, jeśli chcesz użyć 'replaceAll'. – Dukeling

Powiązane problemy