求这样字符串的怎样做替换操作

wattor 2010-04-22 05:45:14
有一个字符串,可能是任意的合法字符串。例如:ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;
当遇到<<>>是就进行替换。例如<<123>>替换成china;<<456>>替换成功japan;<<789>>替换成功American
---------------------------
原字符串ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;
进替换后变成ja;d110jfa;chinadafadj;lfjapanAmericanadljfa;
...全文
151 26 打赏 收藏 转发到动态 举报
写回复
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
mf0606 2010-04-25
  • 打赏
  • 举报
回复
看我的,配置文件放到src下面,名字叫text.properties

china=<<123>>
japan=<<456>>
american=<<789>>


java代码如下

String text = "ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;";
Properties prop = new Properties();
FileInputStream fis = new FileInputStream("src/text.properties");
prop.load(fis);
Enumeration<Object> e = prop.keys();
while(e.hasMoreElements()) {
String str = (String)e.nextElement();
text = text.replaceAll(prop.getProperty(str), str);
}

System.out.println(text);


结果如下
ja;d110jfa;chinadafadj;lfjapanamericanadljfa;
mf0606 2010-04-25
  • 打赏
  • 举报
回复
楼主可以写一个配置文件
然后对应的map,找到要替换的内容
这样的话可以想替换多少就替换多少
然后可以replace就OK了
Ark032425 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dazzlingwinter 的回复:]
Java code

public static void main(String[] args) {
String str = "ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa";
String[][] objStringArray = new String[3][];
objStringA……
[/Quote]
用正则,方便快捷
wattor 2010-04-23
  • 打赏
  • 举报
回复
可以给出一个好的解决方案吗,最好有代码???
zfq642773391 2010-04-23
  • 打赏
  • 举报
回复
10楼的方案
up
up
up
up
up
up
mtawaken 2010-04-22
  • 打赏
  • 举报
回复
这不是可以搞成基于表驱动的string match问题么
ineedaname 2010-04-22
  • 打赏
  • 举报
回复
规则用了map。
String s="ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;";
//map存储替换规则
Map<String, String> params=new HashMap<String, String>();
params.put("<<123>>", "china");
params.put("<<456>>", "japan");
params.put("<<781>>", "american");

for (Iterator<String> iter = params.keySet().iterator(); iter.hasNext();) {
String key = iter.next();
s = s.replace(key, params.get(key));
}

System.out.println(s);
zfq642773391 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wattor 的回复:]
有没有办法先找到<<>>的值,有了再替换;没有就不替换了
[/Quote]
10楼的就是这样的,楼主没学过正则表达式吧
wattor 2010-04-22
  • 打赏
  • 举报
回复
有没有办法先找到<<>>的值,有了再替换;没有就不替换了
zfq642773391 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wattor 的回复:]
对应规则
123 替换成 china
456 替换成 japan
789 替换成 american
321 替换成 china
654 替换成 japan
987 替换成 american

原字符串ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;
进替换后变成ja;d110jfa;chinadafadj;lfjapanAm……
[/Quote]
10楼的写法已经实现你说的了,他先获得<<<>>>里的内容,然后根据这个获得的内容到Map里去找对应的匹配
然后替换,他并没有全部的去匹配,而是指匹配检测到的
wattor 2010-04-22
  • 打赏
  • 举报
回复
对应规则
123 替换成 china
456 替换成 japan
789 替换成 american
321 替换成 china
654 替换成 japan
987 替换成 american

原字符串ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;
进替换后变成ja;d110jfa;chinadafadj;lfjapanAmericanadljfa;
其实很多规则都没有用到,怎么简化?

wattor 2010-04-22
  • 打赏
  • 举报
回复
规则也许有100个,但一个字符串可能才用到三个,一个一个替换,是不是太麻烦?



zfq642773391 2010-04-22
  • 打赏
  • 举报
回复
如果匹配规则多了 ,就按10楼的写法,把匹配规则都写到Map里,循环匹配替换
zfq642773391 2010-04-22
  • 打赏
  • 举报
回复
如果匹配规则多了 ,就按10的写法,把匹配规则都写到Map里,循环匹配替换
wattor 2010-04-22
  • 打赏
  • 举报
回复
如果匹配规则很多,有没有好的方法?
123 替换成 china
456 替换成 japan
789 替换成 american
。。。。。
。。。。
zfq642773391 2010-04-22
  • 打赏
  • 举报
回复

String str = "ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa";
str.replace("<<>>", "");
str.replace("<<123>>", "china");
str.replace("<<456>>", "japan");
str.replace("<<789>>", "american");

hbgzg3006 2010-04-22
  • 打赏
  • 举报
回复

String s="ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;";
Map<String, String> replaceMap=new HashMap<String, String>(){{ //你的规则
put("123", "china");
put("456", "japan");
put("789", "american");;
}};
Matcher m=Pattern.compile("(?is)<<(.+?)>>").matcher(s);
while (m.find()) {
if(replaceMap.containsKey(m.group(1))){
s=s.replace(m.group(), replaceMap.get(m.group(1)));
} else {
s=s.replace(m.group(), "");
}
}
System.out.println(s);
wattor 2010-04-22
  • 打赏
  • 举报
回复
三楼的解决是可以,可以不用数组处理吗,我对数组不太熟;或者帮我解释一下
zfq642773391 2010-04-22
  • 打赏
  • 举报
回复
要替换的项数多了的话就用正则表达式吧
wattor 2010-04-22
  • 打赏
  • 举报
回复
规则:
<<>>提供对应值的,就替换成相应的值;如果不提供,就替换成空
加载更多回复(6)
相关推荐

62,568

社区成员

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