问一个字符串分割转换问题

xiaoxiao888 2007-12-19 08:36:19
现在得到一个字符串
EXAMAGE=10,EXAMAGEDAY=14,EXAMAGEMONTH=0,OPEENGNAME1='张三',OPEENGNAME2='李四',OPEENGNAME3='王二麻子',OPEENGUSERID1='3',OPEENGUSERID2='112267',OPEENGUSERID3='141755',REPSTS='0',UPDTERM='127.0.0.1',UPDUSERID='3'

我先把它转化成新的sql的检索条件

ip='127.0.0.1',guanliren='张三',fuwuyuan='李四',keren='王二麻子'

简单的说,怎么能把上面的字符串做处理以后,得到下面的字符串

谢谢大家,希望能得到你们的帮助
...全文
140 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
吐司vivi 2007-12-19
  • 打赏
  • 举报
回复
同意用hashmap
shan1119 2007-12-19
  • 打赏
  • 举报
回复
如果列名固定,可以用HashMap
String str = "EXAMAGE=10,EXAMAGEDAY=14,EXAMAGEMONTH=0," +
"OPEENGNAME1='张三',OPEENGNAME2='李四',OPEENGNAME3='王二麻子'," +
"OPEENGUSERID1='3',OPEENGUSERID2='112267',OPEENGUSERID3='141755',REPSTS='0'," +
"UPDTERM='127.0.0.1',UPDUSERID='3'";
Matcher m = Pattern.compile("([^,]+)=([^,$]+)[,$]").matcher(str);
HashMap hp = new HashMap();
while(m.find()){
hp.put(m.group(1), m.group(2));
}
//ip='127.0.0.1',guanliren='张三',fuwuyuan='李四',keren='王二麻子'
StringBuffer rtn = new StringBuffer();
rtn.append("ip="+hp.get("UPDTERM")+",");
rtn.append("guanliren="+hp.get("OPEENGNAME1")+",");
rtn.append("fuwuyuan="+hp.get("OPEENGNAME2")+",");
rtn.append("keren="+hp.get("OPEENGNAME3"));

System.out.println(rtn.toString());
xiaoxiao888 2007-12-19
  • 打赏
  • 举报
回复
基本解决了

太谢谢大家了

谢谢你们

特别是七楼的兄弟

谢谢你

你们都是好人
eidolon_warrior 2007-12-19
  • 打赏
  • 举报
回复
如,if(str[i].startswith(",OPEENGNAME1="))
{ s = str[i].substring(1);//去掉“,”
s = s.replaceAll("OPEENGNAME1","guanliren");}
不懂编程 2007-12-19
  • 打赏
  • 举报
回复
如果列名固定,可以用正则表达式做
eidolon_warrior 2007-12-19
  • 打赏
  • 举报
回复
String[] str = s.split(",");//根据“,”把字符串分割
然后依次判断是否为你需要的字符串,如果是 进行替换截取,最后合并。
xiaoxiao888 2007-12-19
  • 打赏
  • 举报
回复
呵呵

就是我想用上面的字符串作为条件

得到下面那样的一个字符串

因为那个字符串是变量,里面的人名和ip总是在变化的

所以想知道通过什么方法,能用已知的上面的条件,得到下面的那样的字符串
xiaoxiao888 2007-12-19
  • 打赏
  • 举报
回复
呵呵

就是我想用上面的字符串作为条件

得到下面那样的一个字符串

因为那个字符串是变量,里面的人名和ip总是在变化的

所以想知道通过什么方法,能用已知的上面的条件,得到下面的那样的字符串
shan1119 2007-12-19
  • 打赏
  • 举报
回复
没理解楼主的意思
talent_marquis 2007-12-19
  • 打赏
  • 举报
回复
7楼的好,最具有扩展性,以后就算参数改变了,只要对应关系不变都可以用
eview 2007-12-19
  • 打赏
  • 举报
回复
觉得7楼的好,呵呵,很规范
goodsong 2007-12-19
  • 打赏
  • 举报
回复
貌似用不着HashMap,
如果EXAMAGE=10,EXAMAGEDAY=14,EXAMAGEMONTH=0...这样的顺序不固定,就是说可能会有
EXAMAGEMONTH=0跑到前面的,可以用上面的那个HashMap的例子
迷眼流金 2007-12-19
  • 打赏
  • 举报
回复
如果输入内容的分隔符固定,参数名固定的话,拆开来挨个读取就是了
goodsong 2007-12-19
  • 打赏
  • 举报
回复
EXAMAGE=10,EXAMAGEDAY=14,EXAMAGEMONTH=0,OPEENGNAME1='张三',OPEENGNAME2='李四 ',OPEENGNAME3='王二麻子',OPEENGUSERID1='3',OPEENGUSERID2='112267', OPEENGUSERID3='141755',REPSTS='0',UPDTERM='127.0.0.1',UPDUSERID='3'
如果这个字符串是固定的,就是各项的位置不变,只是你需要的内容(人名和ip)变的话,用正则表达式轻松搞定。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {

public static void main(String[] args) {
String str="EXAMAGE=10,EXAMAGEDAY=14,EXAMAGEMONTH=0,OPEENGNAME1='张三',OPEENGNAME2='李四 ',OPEENGNAME3='王二麻子',OPEENGUSERID1='3',OPEENGUSERID2='112267', OPEENGUSERID3='141755',REPSTS='0',UPDTERM='127.0.0.1',UPDUSERID='3'";
String result="";
Matcher m = Pattern.compile(".*OPEENGNAME1=(.+),OPEENGNAME2=(.+),OPEENGNAME3=(.+),OPEENGUSERID1.*UPDTERM=(.+),UPDUSERID.*").matcher(str);
if(m.matches())
{
result="ip="+m.group(4)+",guanliren="+m.group(1)+",fuwuyuan="+m.group(2)+",keren="+m.group(3);
}
System.out.println(result);

}

}
zhitaorao 2007-12-19
  • 打赏
  • 举报
回复
up

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧