2010-12-28 13 views
3

Ich versuchte mit folgenden Regex, aber es hat nicht funktioniert.Wie kann ich mit/in Java ersetzen?

myString.replaceAll ("\", "/");

Ausnahme:

java.util.regex.PatternSyntaxException: unerwarteter interner Fehler in der Nähe Index 1 \^bei java.util.regex.Pattern.error (Unknown Quelle) bei java.util.regex.Pattern.compile (Unbekannt Quelle) bei java.util.regex.Pattern. (Unbekannt Quelle) bei java.util.regex.Pattern.compile (Unbekannt Quelle) bei java.lang.String.replaceAll (Unbekannt Quelle)

+1

Um in Unix-Separatoren für den Dateipfad zu konvertieren, können Sie sich Apache Common-IO http://commons.apache.org/io/api-1.4/org/apache/commons/io/FilenameUtils ansehen. html # separatorsToUnix% 28java.lang.String% 29 – gigadot

+0

Danke, das war genau das, was ich brauchte! – newbie

Antwort

7

Ihr Code sollte nicht einmal kompilieren.

"\" entkommt die ", so dass die Zeichenfolge fortgesetzt wird. Schreiben String h = "\"hello\""; macht die Zeichenfolge h enthalten "hello".

Wenn wir ändern dann ändern Sie es zu "\\" (den Backslash zu entkommen) laufen wir in ein anderes Problem. Der reguläre Ausdruck versucht dann, das nächste Zeichen zu entkommen. Zum Beispiel ist Schreiben "\\d+" ein gültiger regulärer Ausdruck (übereinstimmende Ziffern).


In Ihrem Fall jedoch müssen Sie nicht reguläre Ausdrücke überhaupt. Verwenden Sie einfach die replace(char, char) Methode der Zeichenfolge, ersetzt es alle Zeichen.

myString.replace('\\', '/'); 

By the way, wenn Sie Wege austauschen, sollten Sie bei File.separator schauen, um die Systeme zu erhalten Pfad Trennzeichen.

+3

Dies ist bei weitem die beste Antwort (+1). Verwenden Sie reguläre Ausdrücke genau dann, wenn Sie sie brauchen. 'String.replace (char, char)' und 'String.replace (CharSequence, CharSequence)' sollten in 80% der Fälle verwendet werden, in denen Benutzer String.replaceAll() verwenden. –

3

Manchmal braucht man 4 Schrägstriche, weil Backslash ein Escape-Zeichen für regex als gut. Versuchen Sie

myString.replaceAll("\\\\", "/"); 
+0

Das stimmt, aber es löst das falsche Problem (siehe dacwe's Antwort). –

Verwandte Themen