替换String中的变量

时间:2010-03-10 06:18:38

标签: java string

我有一个字符串,其内容如下

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

的值

我如何更换它们?

4 个答案:

答案 0 :(得分:3)

这么简单!

String msg2 = msg.replace("&CHAG_EF", test1).replace("&CHAG_DNE_DTE", test2);

答案 1 :(得分:3)

首先,无法在Java中修改字符串,因此您需要使用正确的修改值创建新版本。有两种方法可以解决这个问题:

  1. 像其他海报所建议的那样动态硬编码所有替换品。对于大字符串或大量替换,这是不可扩展的;或

  2. 循环查找可能的变量。如果他们在你的替换Map,那么替换他们。这与How to create dynamic Template String非常相似。

  3. (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);