2017-07-15 4 views
-3

Ich habe diese Zeichenfolge in JavaWie lösche ich Dubletten aus einer Zeichenkette in Java?

String s1 = "Chicago/London/London/London/Paris"; 
String s2 = "London/London/London/Paris"; 
String s3 = "Prague/London/London/London"; 
String s4 = "London/London"; 

Welche regulären Ausdruck soll ich in replaceAll Funktion "Chicago/London/Paris", "London/Paris", "Prag/London" und "London" zu machen von diese Saiten? Vielen Dank

+5

Was haben Sie versucht zu tun? Und warum denken Sie, dass reguläre Ausdrücke das richtige Werkzeug dafür sind? – UnholySheep

+0

Von was es aussieht, ist Java String nicht der beste Weg, um es zu speichern. Ein Gedanke ist es, es zu teilen, es in ein Set zu legen, also Dubletten automatisch zu eliminieren, und, falls Sie dies wirklich als String benötigen, verbinden Sie es erneut mit '/'. –

+0

Etwas wie das wird es tun: neue ArrayList <> (neue HashSet <> (Arrays.asList (s1.split ("/")))) – ronhash

Antwort

2

Sie müssen selbst damit umgehen. EDIT: optimiert in Übereinstimmung mit @ UnholySheeps Kommentar. EDIT: nach @ Pshemos Kommentar wurden beide Java 7/8 Versionen verbessert.

public String removeDubs(String input) { 
    String[] parts = input.split("/"); 
    Set<String> unique = new LinkedHashSet<>(Arrays.asList(parts)); 
    return String.join("/", unique); 
} 

EDIT: oder wenn Sie Java-8 verwenden:

public String removeDubsV8(String input) { 
    return Arrays.stream(input.split("/")) 
      .distinct() 
      .collect(Collectors.joining("/")); 
} 
+1

Die Verwendung von 'StringBuilder' (und' substring') ist unnötig, Sie können einfach 'String.join ("/", unique);' stattdessen verwenden – UnholySheep

Verwandte Themen