形如
 23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn
的字符串,给定三个数字,如34,35,23,快速得到字符串 jgeisj dsf abcd
怎么做?

解决方案 »

  1.   

    package com.saturday.string;import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;public class IPMatcher {
            public static void main(String[] args){
    String s="23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn";
    String[] vals=getVal(s,"34","35","23");
    System.out.println(Arrays.asList(vals));

    }

    public static String[] getVal(
    String  mapStr,
    String... keys){

    if(mapStr==null
      ||mapStr.equals("")
      ||keys.length==0){
    return null;
    }

    String[] ret=new String[keys.length];
    Map<String,String> map=new HashMap<String,String>();
    String[] etys=mapStr.split(",");
    String[] datas;

    for(String ety:etys){
    datas=ety.split("~");
    map.put(datas[0].trim(),datas[1].trim());
    }

    for(int i=0,len=keys.length;i<len;i++){
    ret[i]=map.get(keys[i]);
    }

    return ret;
    }
    }
      

  2.   

    import java.util.HashMap;
    import java.util.Map;
    public class StringTest { /**
     * @param args
     */
    public static void main(String[] args) {
    String str = "23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn";
    String[] strArray = str.split(",");
    Map map = new HashMap();
    for(String s : strArray){
    if(null !=s && !"".equals(s.trim())){
    String[] sArr = s.split("~");
    map.put(sArr[0], sArr[1]);
    }
    }
    String outKey = "34,35,23";
    String[] outKeyArr = outKey.split(",");
    for(String key : outKeyArr){
    if(null!=map.get(key))
    System.out.println(key + ": " + map.get(key));
    }
    }
    }
      

  3.   

    #5,#6的方法都会多次遍历String内部的字符数组,不是我想找的方法。
      

  4.   


    import java.util.Map;
    import java.util.HashMap;public class StringSplit {
    public static String getByNumStr(String strString,String strNum){
    String[] arr=strString.split(",");
    Map<String,String> map=new HashMap<String, String>();
    String[] arrTmp=null;
    for(String s:arr){
    arrTmp=s.split("~");
    map.put(arrTmp[0], arrTmp[1]);
    }
    return map.get(strNum);
    } /**
     * @param args
     */
    public static void main(String[] args) {
    String strString="23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn";
    System.out.println(getByNumStr(strString,"35")); }}
      

  5.   


    String s = "23~abcd,34~jgeisj,454~kdsfl,35~dsf,f~csdn/csdn";
            String regex = "(23|34|35)~[^,]+";
            Pattern p;
            Matcher m;
            p = Pattern.compile(regex);
            m = p.matcher(s);
            while (m.find()) {
             System.out.println(m.group());
            }
    先把符合条件的找出来
    扔到hashmap里面
    在这些符合条件的字符串里面找
    相对比较快