如何 把字符串(28|29|30)&31&32,解析成
(id=1|name=2|..)&..&value=4
说明上面的数字,从下面表里查询到,替换成字段2
table
字段1    字段2
28       id=1
29       name=2
.
.
32       value=4

解决方案 »

  1.   

    如何 把字符串(28|29|30)&31&32,解析成
    (id=1|name=2|..)&..&value=4
    ----------------------------------------------
    如果table里的数字顺序跟字符串里的数字顺序是一致的话,并且没有重复,可以这样:
    str="(28|29|30)&31&32"
    str.replaceAll("[\\s]+","%s");
    String.format(str,val[])//val[]是table里要替换的值的集合。
      

  2.   

    str.replaceAll("[\\s]+","%s");  
    楼上的,这行什么意思,能解释下吗
      

  3.   

    根据大家的介意,和自己的尝试,有了一个结果不知对错,公布如下,请大家帮忙纠正 public static void main(String[] args) {
    String src = "(56|1|23)&(33|34)&35&36";
    String testSrc = src.substring(1, src.length()-1);
    String[] strs = ConvertUtil.stringToStrings(src, "&");
    List list = new ArrayList();
    for (int i=0;i<strs.length;i++) {
    if (StringParse.isNumber(strs[i])){
    list.add(strs[i]);
    }else {
    String[] strs2 = ConvertUtil.stringToStrings(strs[i].substring(1, strs[i].length()-1), "|");
    for (int j =0;j<strs2.length;j++) {
      list.add(strs2[j]);
    }
    }
    }
    String val[] = new String[list.size()];
    for (int k=0;k<list.size();k++) {
    val[k] = String.valueOf(k+1);
    }
    src = src.replaceAll("[\\d]+","%s");
    String result = String.format(src,val);//
    System.out.println(result);
    }
      

  4.   

    思路 是把数字,按顺序放到list,在按顺序替换,这里结果用顺序好表示,
    比如    "(56|1|23)&(33|34)&35&36"
    结果是  (1|2|3)&(4|5)&6&7
      

  5.   

    贴一个解决方案public static String convert(String str)
    {
             //插入的字符串
    String[] insert={"id=","name=","p1=","p2=","value="};
    //切分字符串的正则表达式
    String reg="[ (|)&]";
    //切分
    String ss[]=str.split(reg);
    //剔除空的字符串
    ArrayList<String> list=new ArrayList<String>();
    for(int i=0;i<ss.length;i++)
    if(ss[i].trim().length()!=0)
    list.add(ss[i]);
    ss=new String[list.size()];
    ss=list.toArray(ss);
    //计算子串的偏移
    int[] index=new int[ss.length];
    for(int i=0;i<index.length;i++)
    index[i]=str.indexOf(ss[i],i>0?index[i-1]:0);
    //逐个替换子串
    StringBuffer sb=new StringBuffer(str);
    for(int i=0;i<ss.length && i<insert.length;i++)
    {
    if(insert[i]==null || insert[i].trim().equals(""))
    continue;
    sb.insert(index[i],insert[i]);
    //替换后校正子串偏移
    for(int j=i+1;j<index.length;j++)
    index[j]+=insert[i].length();
    }
    return sb.toString();
    }
      

  6.   

    修正一下,计算子串偏移index[i]=str.indexOf(ss[i],i>0?index[i-1]+ss[i-1].length():0);测试结果
    convert("(28|28|28)&28&28")(id=28|name=28|p1=28)&p2=28&value=28