有一个字符串,可能是任意的合法字符串。例如: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;
当遇到<<>>是就进行替换。例如<<123>>替换成china;<<456>>替换成功japan;<<789>>替换成功American
---------------------------
原字符串ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;
进替换后变成ja;d110jfa;chinadafadj;lfjapanAmericanadljfa;
123 替换成 china
456 替换成 japan
789 替换成 american
假设出现了234 如何替换?
假如你有一个替换规则,就是说出现了234会有一个对应的替换字符串?还是只可能出现你说的上述三种替换。
public static void main(String[] args) {
String str = "ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa";
String[][] objStringArray = new String[3][];
objStringArray[0] = new String[]{"<<123>>", "china"};
objStringArray[1] = new String[]{"<<456>>", "japan"};
objStringArray[2] = new String[]{"<<789>>", "american"};
for(int i=0; i<objStringArray.length; i++) {
System.out.println(str);
str = str.replace(objStringArray[i][0], objStringArray[i][1]);
}
System.out.println(str);
}
/*
ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa
ja;d110jfa;chinadafadj;lf<<456>><<789>>adljfa
ja;d110jfa;chinadafadj;lfjapan<<789>>adljfa
ja;d110jfa;chinadafadj;lfjapanamericanadljfa
*/
ja;d<<234>>110jfa;chinadafadj
更好后为
ja;d110jfa;chinadafadj
<<>>提供对应值的,就替换成相应的值;如果不提供,就替换成空
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);
String str = "ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa";
str.replace("<<>>", "");
str.replace("<<123>>", "china");
str.replace("<<456>>", "japan");
str.replace("<<789>>", "american");
123 替换成 china
456 替换成 japan
789 替换成 american
。。
。
123 替换成 china
456 替换成 japan
789 替换成 american
321 替换成 china
654 替换成 japan
987 替换成 american原字符串ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;
进替换后变成ja;d110jfa;chinadafadj;lfjapanAmericanadljfa;
其实很多规则都没有用到,怎么简化?
然后替换,他并没有全部的去匹配,而是指匹配检测到的
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);
up
up
up
up
up
up
然后对应的map,找到要替换的内容
这样的话可以想替换多少就替换多少
然后可以replace就OK了
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;