Regular Expression um duplikate zu entfernen in Java?
Hallo,
Ich habe mehrere Pathnames:
Z:///Ordner/lied.mp3
Z://Ordner//lied.mp3
Ich möchte mit dem folgenden Code erreichen dass in allen Fällen folgendes Rauskommt:
Z:/Ordner/Lied.mp3
pfad.replaceAll(regex, '/');
Ich weiß wie ich es ersetzen soll ich brauche nur die Regex. Ich komme selber nicht drauf.
4 Antworten
pfad.replaceAll("/{2,}", "/");
oder
pfad.replace("//", "/");
glaube ich, nicht getestet
Danke, wieder was gelernt. Ich bau mir die Ausdrücke meist via regex101 zusammen, da wird Java leider nicht mit berücksichtigt.
Bei
pfad.replace("//", "/");
halbiert sich nur die Anzahl der Slashes. Aus
Z:///Ordner///lied.mp3
würde
Z://Ordner//lied.mp3
Wenn, müsste man replacen, bis nichts mehr matcht. Da passt dann aber die erste Möglichkeit besser ;-)
Habs nicht überprüft, aber vermute mal, das sollte funktionieren:
/{2,}
Das sollte funktionieren. Wobei man statt 2 auch 1 nehmen kann (dann wird 1 "/" durch 1 "/" ersetzt), und damit vereinfacht ein "+" schreiben kann.
Edit: Man müsste noch escapen.
ich glaube, dass jonniedoes methode schneller ist als mit +
Der Regex wäre: \/+
Bzw. in Java: "\\/+"
Und wie mache ich das mit \\\\? Es wird ja automatisch \\ ausgegeben. Aber wenn ich statt 2 eine haben will? Ich weiß ich müsste dann halt nur \\ hinschreiben aber mich interessiert wie es mit regex geht.
Entweder "\/+" alle zu erstetzen oder "\/{2,}" um nur doppelte (oder mehr) zu ersetzen
Zweiteres funktioniert leider nicht, damit werden z.B. 3 "/" nicht ersetzt, da die Ersetzung nicht rekursiv läuft. Zudem muss man noch escapen.