2016-04-30 4 views
0

Ich habe eine Zeichenfolge mit folgendem Wert:Einzel Id aus wiederholten Werten in Java Entfernen

String id = "21713|4 Pieces=50,21701|2 pieces=35,21701|250 Gram=30,21701|250 Gram=30,21701|250 Gram=30,"; 

Die oben angegebene ID hat 21701|250 Gram=30 dreimal wiederholt. Alles, was ich tun möchte, ist, wenn ich auf "Element entfernen" -Button klicke, der "Nein" passiert. von counts, nur so viel Anzahl von 21701|250 Gram=30 sollte entfernt werden.

Wie können wir damit umgehen?

+0

uns Zeigen Sie, was Sie – m0skit0

Antwort

0

Ich denke, die beste Option, die Sie haben, besteht darin, die Zeichenfolge in eine Map zu analysieren, die die Anzahl der Wiederholungen speichert. Mit dieser Karte können Sie die Zeichenfolge nach dem Drücken der Schaltflächen neu erstellen.

Einschränkung: Es kann zu Problemen kommen, wenn die Reihenfolge der Stringteile wichtig ist.

IMHO, um eine solche Zeichenfolge in Ihrer Anwendung zu haben, scheint wie schlechtes Design zu sein. (es sei denn, es ist eine Übung)

0

Versuchen Sie es.

static String remove(String id, int countToRemove) { 
    Set<String> set = Stream.of(id.split("(?<=,)")) 
     .collect(Collectors.groupingBy(s -> s, Collectors.counting())) 
     .entrySet().stream() 
     .filter(e -> e.getValue() == countToRemove) 
     .map(e -> e.getKey()) 
     .collect(Collectors.toSet()); 
    return Stream.of(id.split("(?<=,)")) 
     .filter(s -> !set.contains(s)) 
     .collect(Collectors.joining()); 
} 

Und

String id = "21713|4 Pieces=50,21701|2 pieces=35,21701|250 Gram=30,21701|250 Gram=30,21701|250 Gram=30,"; 
System.out.println(remove(id, 3)); 

Ergebnis:

21713|4 Pieces=50,21701|2 pieces=35, 

In Java7

static String remove(String id, int countToRemove) { 
    Map<String, Integer> map = new HashMap<>(); 
    for (String key : id.split("(?<=,)")) { 
     Integer value = map.get(key); 
     if (value == null) 
      value = 0; 
     map.put(key, value + 1); 
    } 
    Set<String> set = new HashSet<>(); 
    for (Entry<String, Integer> e : map.entrySet()) 
     if (e.getValue() == countToRemove) 
      set.add(e.getKey()); 
    StringBuilder sb = new StringBuilder(); 
    for (String key : id.split("(?<=,)")) 
     if (!set.contains(key)) 
      sb.append(key); 
    return sb.toString(); 
} 
+0

Nun versucht haben, leider werde ich nicht in der Lage sein, benutze Java8. Können Sie bitte eine Lösung mit Java7 geben? – Ravi

+0

wirklich danke Kumpel. Aber Collectors sind Teil von Java8. ;-( – Ravi

+0

Das ergibt eine falsche Ausgabe. CountToRemove arbeitet als Index, anstatt wie oft es dieses passende Element entfernen soll. ;-( – Ravi

Verwandte Themen