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

KJW*_*KJW 4 java

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

0#显示组号.所以Aitem, Aitem2, Aitem3属于团体0.Bitem, Bitem2在小组中1.Citem在小组中2.如果没有组号,则它们将全部放在单独的组中.所以Nitem, Nitem2将被安排在小组中3.

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

[array("Aitem,Aitem2,Aitem3"), array("Bitem, Bitem2"), array("Citem"), array("Nitem, Nitem2")]
Run Code Online (Sandbox Code Playgroud)

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

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

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] + "\"");
   }
Run Code Online (Sandbox Code Playgroud)

dog*_*ane 7

我的答案显示了如何使用单个正则表达式来提取组和项目.然后,您可以将它们存储在地图中.

    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));
    }
Run Code Online (Sandbox Code Playgroud)

打印:

 : [Nitem, Nitem2]
0 : [Aitem, Aitem2, Aitem3]
1 : [Bitem, Bitem2]
2 : [Citem]
Run Code Online (Sandbox Code Playgroud)

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

我确信正则表达式也可以改进,因为它是用急速写的.