2016-04-30 106 views
0

從重複的值刪除單個標識我有一個字符串值如下:在Java中

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

以上ID都21701|250 Gram=30重複三次。我想要做的是,當我點擊刪除項目按鈕,將通過沒有。的計數,只有那麼多的計數21701|250 Gram=30應該被刪除。

我們該如何處理?

+0

讓我們看看你已經嘗試什麼 – m0skit0

回答

0

我認爲你擁有的最佳選擇是將字符串解析爲一個存儲重複次數的Map。 使用此地圖,您可以在按下按鈕之後重建字符串。

限制:如果字符串部分的順序很重要,您可能會遇到問題。

恕我直言,你的應用程序中有這樣一個字符串開始似乎是不好的設計。 (除非是練習)

0

試試這個。

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

而且

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

結果:

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

在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

好,可惜我不能使用Java8。你可以請用Java7給解決方案嗎? – Ravi

+0

真的非常感謝隊友。但收藏家是Java8的一部分。 ;-( – Ravi

+0

這給出了一個錯誤的輸出,countToRemove作爲索引而不是它應該刪除匹配元素的次數。 – Ravi