我现在有一个字符串,例如:"FI:Z;P,SC,BE,CT"
我想把FI,SC,BE,CT单独取出来放到ArrayList中,再根据FI把Z和P放到另一个ArrayList中.
------解决方案--------------------
String str = "FI:Z;P,SC,BE,CT";
String s1[] = str.split(",");
int index;
String left;
String right;
ArrayList list1 = new ArrayList();
String s2[];
HashMap map = new HashMap();
for (int i = 0; i < s1.length; i++){
index = s1[i].indexOf(":");
if (index > 0){
left = s1[i].substring(0, index - 1);
list1.add(left);
right = s1[i].substring(index);
s2 = right.split(";");
map.put(left, s2);
} else {
list1.add(s1[i]);
}
}
没有太理解lz需求,上面的list1和map大概是lz想要的。
------解决方案--------------------
将这个字符串映射成一个 Map<String, List<String>> 的对象,
key 为 FI、SC、BE、CT 之类的;value 为 key 冒号后以分号间隔的 List
- Java code
import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;public class Test { public static void main(String[] args) { String str = "FI:Z;P,SC,BE,CT"; Map<String, List<String>> map = process(str); // 遍历输出 for(Map.Entry<String, List<String>> entry : map.entrySet()) { System.out.println(entry.getKey()); List<String> list = entry.getValue(); if(list.size() > 0) { for(String s : list) { System.out.println(" " + s); } }else{ System.out.println(" <null>"); } } } public static Map<String, List<String>> process(String str) { String[] step1 = str.split(","); Map<String, List<String>> map = new LinkedHashMap<String, List<String>>(); for(String s : step1) { String[] step2 = s.split(":"); List<String> list = new ArrayList<String>(); if(step2.length > 1) { String[] step3 = step2[1].split(";"); list = Arrays.asList(step3); } map.put(step2[0], list); } return map; }}