gpt4 book ai didi

Java:如何将相似的字符串(项目)分组到各自的数组(组)?

转载 作者:搜寻专家 更新时间:2023-11-01 01:14:45 30 4
gpt4 key购买 nike

我有以下字符串 "0#Aitem, 0#Aitem2, 0#Aitem3, 1#Bitem, 1#Bitem2, 2#Citem, Nitem, Nitem2"。

0#表示组号。所以 Aitem, Aitem2, Aitem3 将属于组 0Bitem,Bitem2 在组 1 中。组 2 中的 Citem。如果没有组号,他们将被放在不同的组中。所以 Nitem, Nitem2 将被放置在组 3 中。

我想为每个组创建一个数组,并将“项目”放在相应的组(数组)中。所以我最终会得到类似的东西

[array("Aitem,Aitem2,Aitem3"), array("Bitem, Bitem2"), array("Citem"), array("Nitem, Nitem2")]

我猜我需要一个 arrayList 来保存所有分别具有适当元素(项目)的组(数组)。

这就是我的开始,但我不知道这是否是最好的方法。该字符串是动态的,因此可以有任意数量的组,并且必须遵循上述条件。

String[] x = Pattern.compile(",").split("0#item, 0#item2, 0#item3, 1#item, 1#item2, 2#item, item");
for (int ii=0; ii<x.length; ii++) {
System.out.println(i + " \"" + x[ii] + "\"");
}

最佳答案

我的回答展示了如何使用单个正则表达式 来提取组和项目。然后您可以将这些存储在 map 中。

    String s =  "0#Aitem, 0#Aitem2, 0#Aitem3, 1#Bitem, 1#Bitem2, 2#Citem, Nitem, Nitem2";
Pattern p = Pattern.compile("(\\d*)[#]{0,1}(\\w+?)(,|$)");
Matcher m = p.matcher(s);
Map<String, List<String>> map = new TreeMap<String, List<String>>();
while(m.find()){
String group = m.group(1);
String item = m.group(2);
List<String> items = map.get(group);
if(items == null){
items = new ArrayList<String>();
map.put(group, items);
}
items.add(item);
}
//let's print it out
for(String key : map.keySet()){
System.out.println(key + " : " + map.get(key));
}

打印:

 : [Nitem, Nitem2]
0 : [Aitem, Aitem2, Aitem3]
1 : [Bitem, Bitem2]
2 : [Citem]

目前,没有组的项目是针对空字符串键入的。我将把它留作您处理这种情况的练习。它应该只是找到最大键并递增它的情况。

我确信正则表达式也可以改进,因为它是仓促编写的。

关于Java:如何将相似的字符串(项目)分组到各自的数组(组)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497288/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com