我有以下字符串 "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)
我的答案显示了如何使用单个正则表达式来提取组和项目.然后,您可以将它们存储在地图中.
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)
目前,没有组的项目键入空字符串.我将把它作为练习来处理这种情况.它应该只是找到最大键并递增它的情况.
我确信正则表达式也可以改进,因为它是用急速写的.
| 归档时间: |
|
| 查看次数: |
9114 次 |
| 最近记录: |