我的字符串值低于以下值:
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 :(得分:0)
我认为您拥有的最佳选择是将String解析为存储重复次数的Map。 使用此Map,您可以在按下按钮后重建String。
限制:如果字符串部分的顺序很重要,则可能会遇到问题。
恕我直言,在您的应用程序中开始使用这样的字符串似乎是糟糕的设计。 (除非是练习)
答案 1 :(得分: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();
}