字符串(28|29|30)&31&32解析问题,求助
如何 把字符串(28|29|30)&31&32,解析成
(id=1|name=2|..)&..&value=4
说明上面的数字,从下面表里查询到,替换成字段2
table
字段1 字段2
28 id=1
29 name=2
.
.
32 value=4
------解决方案--------------------如何 把字符串(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里要替换的值的集合。。。。
------解决方案--------------------贴一个解决方案
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();
}