2010-03-10 33 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