String a="a=1|b=2|c=3|d=5";
String b="a=3|b=2|c=3|e=9|y=3";两个字符串都是这种格式
我想把a里的每个键去与b里的匹配,替换掉值。没有的补上,有的替换。让b
b="a=1|b=2|c=3|d=5|e=9|y=3";

解决方案 »

  1.   

    这个最后的结果b 有顺序要求吗? 比如 d=5 就一定要在c=3和 e=9中间
      

  2.   


    public class Test { public static void main(String[] args) {
    String a="a=1|b=2|c=3|d=5";
    String b="a=3,b=5|c=3|e=9|y=3";
    String [] as = a.split("\\|");
    String [] bs = b.split("\\|");
    //System.out.println(bs.toString());
    Map<String, String> map = new HashedMap();
    fillMapWithStrings(bs, map);
    fillMapWithStrings(as, map);
    StringBuffer bf = new StringBuffer();
    for(String key : map.keySet()){
    bf.append(key).append("=").append(map.get(key)+"|");
    }
    String bfs = bf.charAt(bf.length()-1)!='|'?bf.toString():bf.substring(0, bf.length()-1);
    System.out.println("b="+bfs);
    }

    public static Map fillMapWithStrings(String [] strs,Map<String, String> map){
    for(String str : strs){
    String [] ss = str.split("=");
    map.put(ss[0], ss[1]);
    }
    return map;
    }
    }
      

  3.   

    public class Test { public static void main(String[] args) {
    String a="a=1|b=2|c=3|d=5";
    String b="a=3,b=5|c=3|e=9|y=3";
    String [] as = a.split("\\|");
    String [] bs = b.split("\\|");
    //System.out.println(bs.toString());
    Map<String, String> map = new HashedMap();
    fillMapWithStrings(bs, map);
    fillMapWithStrings(as, map);
    StringBuffer bf = new StringBuffer();
    for(String key : map.keySet()){
    bf.append(key).append("=").append(map.get(key)+"|");
    }
    String bfs = bf.charAt(bf.length()-1)!='|'?bf.toString():bf.substring(0, bf.length()-1);
    System.out.println("b="+bfs);
    }

    public static Map fillMapWithStrings(String [] strs,Map<String, String> map){
    for(String str : strs){
    String [] ss = str.split("=");
    map.put(ss[0], ss[1]);
    }
    return map;
    }
    }
      

  4.   

    额 其实fillMapWithStrings 好像可以是void的
      

  5.   


    public static void main(String[] args)
        {
         String a="a=1|b=2|c=3|d=5";
         String b="a=3|b=2|c=3|e=9|y=3";
         String[] arrayA=a.split("\\|");
         String[] arrayB=b.split("\\|");
         TreeMap<String,String> mapA=new TreeMap<String,String>();
         TreeMap<String,String> mapB=new TreeMap<String,String>();     insertToMap(arrayA,mapA);
         insertToMap(arrayB,mapB);
         mapB=merge(mapA,mapB);
         String c="";
         for(String s:mapB.keySet())
         {
         c+=s+"="+mapB.get(s)+"|";
         }
         c=c.substring(0,c.length()-1);
         System.out.println(c);
        } private static TreeMap<String, String> merge(TreeMap<String, String> mapA,
    TreeMap<String, String> mapB) {
    for(String t:mapA.keySet())
    {
    mapB.put(t, mapA.get(t));
    }
    return mapB;
    } private static void insertToMap(String[] arrayA,
    TreeMap<String, String> mapA) {
    for(int i=0;i<arrayA.length;i++)
    {
    String[] temp=arrayA[i].split("=");
    mapA.put(temp[0], temp[1]);
    }
    }
      

  6.   

    没有顺序 可以用hashmap 如果非要有顺序要求 就用实现SortedMap接口的容器
      

  7.   

    你把你的字符串都拆成Map去处理这样就好多了
    要是中间有空格的话
    你那些匹配的就都完蛋了
      

  8.   


    /**
     * @author troy(J2EE)
     * @version 1.0  1995年的3月23日
     */
    public class Test
    {
    public static void  main(String[] args){
    String a="a=1|b=2|c=3|d=5";
    String b="a=3|b=2|c=3|e=9|y=3";
    String[] aToArray=a.split("\\|");
    for (int i=0;i<aToArray.length;i++ ){
    b=b.replace(aToArray[i],"");
    }
    System.out.println((a+"|"+b).replace("|||","|"));
    }
     }
      

  9.   

    11楼的代码吓我一跳 我说牛人出现了 结果打印出的是 a=1|b=2|c=3|d=5|a=3|e=9|y=3
      

  10.   

    public static void main(String[] args) {
    String a="a=1|b=2|c=3|d=5";
    String b="a=3|b=2|c=3|e=9|y=3";

    String c = b;
    String[] stra1 =a.split("[|]");

    for (int i = 0; i < stra1.length; i++) {
    String[] stra2 = stra1[i].split("[=]");
    b.indexOf(stra1[0]);
    if (b.indexOf(stra2[0]) == -1) {
    c = c +"|"+ stra1[i];
    }
    }
    System.out.println(c);
    }
      

  11.   


    这个总可以了吧
    /**
     * @author troy(J2EE)
     * @version 1.0  1995年的3月23日
     */
    public class Test
    {    
        public static void  main(String[] args){
            String a="a=1|b=2|c=3|d=5";
            String b="a=3|b=2|c=3|e=9|y=3";
            String[] aToArray=a.split("\\|");
            for (int i=0;i<aToArray.length;i++ ){
                b=b.replace(aToArray[i],"").replace("|||","|");
            }
    for (int i=0;i<aToArray.length;i++ ){
    if(b.contains(aToArray[i].substring(0,1))){
    b=b.replace(b.substring(b.indexOf(aToArray[i].substring(0,1)),3),"");
    }
            }
    System.out.println(a+b);
        }
     }