我有一个字符串,其内容如下
String msg = "The variables &CHAG_EF and &CHAG_DNE_DTE can be embedded"
String test1 = "22/10/2010 00:10:12"
String test2 = "25/10/2010 00:01:12"
我需要在字符串变量msg中搜索字符串"&CHAG_EF"
,如果存在,则替换为test1
的值,并在字符串变量msg中搜索字符串"&CHAG_DNE_DTE"
,如果它的存在替换为test2
。
我如何更换它们?
答案 0 :(得分:3)
这么简单!
String msg2 = msg.replace("&CHAG_EF", test1).replace("&CHAG_DNE_DTE", test2);
答案 1 :(得分:3)
首先,无法在Java中修改字符串,因此您需要使用正确的修改值创建新版本。有两种方法可以解决这个问题:
像其他海报所建议的那样动态硬编码所有替换品。对于大字符串或大量替换,这是不可扩展的;或
循环查找可能的变量。如果他们在你的替换Map
,那么替换他们。这与How to create dynamic Template String非常相似。
(2)的代码如下所示:
public static String replaceAll(String text, Map<String, String> params) {
Pattern p = Pattern.compile("&(\\w+)");
Matcher m = p.matcher(text);
boolean result = m.find();
if (result) {
StringBuffer sb = new StringBuffer();
do {
String replacement = params.get(m.group(1));
if (replacement == null) {
replacement = m.group();
}
m.appendReplacement(sb, replacement);
result = m.find();
} while (result);
m.appendTail(sb);
return sb.toString();
}
return text;
}
答案 2 :(得分:2)
Java中的字符串是不可变的,因此任何“操纵”方法都会返回一个新字符串而不是修改现有字符串。关于这一点的一个好处是你可以在许多情况下链接操作,如下所示:
String result = msg.replace("&CHAG_EF", test1)
.replace("&CHAG_DNE_DTE", test2);
答案 3 :(得分:1)
msg = msg.replace("&CHAG_EF", test1).replace("&CHAG_DNE_DTE", test2);