2010-03-10 32 views
0

更换可变我有一个具有以下内容在字符串

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" 

我需要搜索的字符串变量味精的字符串"&CHAG_EF"一个字符串,如果它存在与test1值替换,并搜索字符串变量msg为字符串"&CHAG_DNE_DTE",如果它存在替换值test2

我该如何更换它们?

回答

3

太简单了!

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

非常感谢您的信息 – Arav 2010-03-10 09:57:53

1
msg = msg.replace("&CHAG_EF", test1).replace("&CHAG_DNE_DTE", test2); 
+0

非常感谢您的信息 – Arav 2010-03-10 09:58:32

2

字符串在Java中是不可变的,所以任何的“操作”的方法返回一个新的字符串,而不是修改现有的。这样做的一个好处是,你可以连锁经营在许多情况下,像这样:

String result = msg.replace("&CHAG_EF", test1) 
        .replace("&CHAG_DNE_DTE", test2); 
+0

非常感谢您的信息 – Arav 2010-03-10 09:58:09

3

首先,字符串不能在Java中修改,所以你需要创建一个新的版本,以与正确的修改后的值。有两种方法可以解决这个问题:

  1. 动态硬编码所有的替换,像其他海报建议。这不能用大字符串或大量替换来扩展;或

  2. 通过字符串循环寻找潜在变量。如果他们在您的替换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; 
} 
+0

非常感谢了信息 – Arav 2010-03-10 09:57:21