日期:2014-05-20  浏览次数:20855 次

Java 中String转换为HashMap,截取字符串!
字符串
str = 
"ZM01(1001:BQSJ, F01)-ZM01(1001:BQLJ, F02)-ZM01(1001:14BQSJ, F03)
-ZM02(1002:BQSJ, B01)-ZM02(1002:BQLJ, B02)-ZM02(1002:14BQSJ, B03)"



转换结果:例如map_1 = {ZM01, map_2}

map_2 = {F01, 1001:BQSJ}..................

最终返回map_1,要求不能重复;

求高手,接代码!

------解决方案--------------------

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
public static void main(String[] args) {

Map<String,Map<List<String>,List<String>>> map1 = new HashMap<String, Map<List<String>,List<String>>>();

String str = "ZM01(1001:BQSJ, F01)-ZM01(1001:BQLJ, F02)-ZM01(1001:14BQSJ, F03)-ZM02(1002:BQSJ, B01)-ZM02(1002:BQLJ, B02)-ZM02(1002:14BQSJ, B03)";
String[] des = str.split("-");
String regex = "(ZM\\d{2})\\((.*), (\\w+)\\)";

for (int i = 0; i < des.length; i++) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(des[i]);
if (matcher.find()) {
String str1 = matcher.group(1);
String str2 = matcher.group(2);
String str3 = matcher.group(3);

if(!map1.containsKey(str1)){
Map<List<String>,List<String>> nameMap = new HashMap<List<String>,List<String>>();
List<String> strList1 = new ArrayList<String>();
strList1.add(str2);
List<String> strList2 = new ArrayList<String>();
strList2.add(str3);
nameMap.put(strList2,strList1);
map1.put(str1, nameMap);
}else{
Iterator<List<String>> iteratorKey = map1.get(str1).keySet().iterator();
while(iteratorKey.hasNext())
iteratorKey.next().add(str3);
Iterator<List<String>> iteratorValue = map1.get(str1).values().iterator();
while(iteratorValue.hasNext())
iteratorValue.next().add(str2);
}

}
}

System.out.println("输出结果:"+map1);
}
}


楼主看看是不是要这个效果?
希望楼下能抛砖引玉。