從重複的值刪除單個標識我有一個字符串值如下:在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
應該被刪除。
我們該如何處理?
從重複的值刪除單個標識我有一個字符串值如下:在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
應該被刪除。
我們該如何處理?
我認爲你擁有的最佳選擇是將字符串解析爲一個存儲重複次數的Map。 使用此地圖,您可以在按下按鈕之後重建字符串。
限制:如果字符串部分的順序很重要,您可能會遇到問題。
恕我直言,你的應用程序中有這樣一個字符串開始似乎是不好的設計。 (除非是練習)
試試這個。
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();
}
讓我們看看你已經嘗試什麼 – m0skit0