java字符串解析

源字符串 22:w,22:c,21:r,7:r,7:w,7:c,8:w,8:c,8:d,9:r,9:w,9:c,9:d,10:r

目标字符串 22:w,22:c;21:r;7:r,7:w,7:c;8:w,8:c,8:d;9:r,9:w,9:c,9:d;10:r

对于源字符串含义 22:w 代表 编号为22的国家拥有的权限为w, 想将源字符串格式为 国家编号1:权限a,权限b;国家2:权限c,权限.....

用java 解析 或正则表达式
[b]问题补充:[/b]
我的问题解决了,跟你用的方法差不多,但还是要感激回帖的人,希望有类似的问题的人不再有问题

[code="java"]
public static void main(String[] args) {

    String source = "22:w,22:c,21:r,7:r,7:w,7:c,8:w,8:c,8:d,9:r,9:w,9:c,9:d,10:r";
    String result = parse(source);

    System.out.println(result);
}

public static String parse(String source) {
    List<String> list = null;
    StringBuffer buffer = new StringBuffer();
    String result = null;
    Map<String, List<String>> map = new HashMap<String, List<String>>();

    String[] array = source.split("\\,");

    for(String e : array) {
        String[] entry = e.split(":");
        String key = entry[0];
        String value = entry[1];

        if(map.get(key) == null) {
            list = new ArrayList<String>();
            list.add(value);
            map.put(key, list);
        } else {
            list = map.get(key);
            if(!list.contains(value)) {
                list.add(value);
            }
        }
    }

    Iterator iter = map.keySet().iterator();
    while(iter.hasNext()) {
        String key = (String) iter.next();
        list = map.get(key);
        buffer.append(key + ":");
        for(int i = 0; i < list.size(); i++) {
            buffer.append(list.get(i));
            if(i != list.size() - 1) {
                buffer.append(",");
            }
        }

        buffer.append(";");
    }

    result = buffer.toString();

    if(buffer.charAt(buffer.length() - 1) == ';')  {
        result = result.substring(0, result.length() - 1);
    }

    return result;
}

[/code]
输出
21:r;10:r;7:r,w,c;22:w,c;9:r,w,c,d;8:w,c,d