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

java截取字符串问题,请高手帮忙啊!在线等待!!!!!!!!!!
我现在有一个字符串,例如:"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;
    }
}