Regular Expression um duplikate zu entfernen in Java?

4 Antworten

pfad.replaceAll("/{2,}", "/");
oder
pfad.replace("//", "/");
glaube ich, nicht getestet

Willibergi  24.04.2020, 20:07

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 ;-)

1
MichaelDRajus  24.04.2020, 20:05

Zweiteres funktioniert leider nicht, damit werden z.B. 3 "/" nicht ersetzt, da die Ersetzung nicht rekursiv läuft. Zudem muss man noch escapen.

2
MichaelDRajus  24.04.2020, 20:15
@colum123

Danke, wieder was gelernt. Ich bau mir die Ausdrücke meist via regex101 zusammen, da wird Java leider nicht mit berücksichtigt.

1

Habs nicht überprüft, aber vermute mal, das sollte funktionieren:

/{2,}
Woher ich das weiß:Studium / Ausbildung

MichaelDRajus  24.04.2020, 20:04

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.

1

Der Regex wäre: \/+
Bzw. in Java: "\\/+"

Woher ich das weiß:Studium / Ausbildung – Informatik-Studium

irgendeinkerl 
Beitragsersteller
 24.04.2020, 21:38

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.

0

Entweder "\/+" alle zu erstetzen oder "\/{2,}" um nur doppelte (oder mehr) zu ersetzen