源字符串 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