短信,郵件模板特殊符號${變量名},${1}替換,根本不需要啥算法

1.首先我們來看比較常見的形式:${userName}即${變量名}

 這種無非都是使用正則匹配然後根據變量名去替換實現,但是如果不想自己寫太多代碼去實現的話,可以用apache.commons-text工具的api實現

apache.commons

maven依賴

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-text</artifactId>
	<version>1.8</version>
</dependency>

代碼實現 

String emailTempl="你好,我是${userName},很高興見到你!";

Map<String,String> replaceMap=new HashMap<String,String>();

replaceMap.put("userName","皮卡丘");

StringSubstitutor sub = new StringSubstitutor(replaceMap);

String sendContent= sub.replace(emailTempl);

system.out.println(sendContent);

// 控制檯輸出
/***你好,我是皮卡丘,很高興見到你!*****/

簡單高效

模板引擎freemarker

maven

<dependency>
  <groupId>org.freemarker</groupId>
  <artifactId>freemarker</artifactId>
  <version>2.3.23</version>
</dependency>

 代碼實現

try {
    map = new HashMap();
    map.put("name", "張三");
    map.put("money", 10.155);
    map.put("point", 10);
    Template template = new Template("strTpl", "您好${name},晚上好!您目前餘額:${money?string(\"#.##\")}元,積分:${point}", new Configuration(new Version("2.3.23")));
    StringWriter result = new StringWriter();
    template.process(map, result);
    System.out.println(result.toString());
    //您好張三,晚上好!您目前餘額:10.16元,積分:10
}catch(Exception e){
    e.printStackTrace();
}

2.序號變量名${1},${2}......

使用內置String.format

String message = MessageFormat.format("您好{0},晚上好!您目前上網時間還剩:{1}小時,餘額:{2}元", "李四", 3, 10);
System.out.println(message);
//您好李四,晚上好!您目前上網時間還剩:3小時,餘額:10元

3.原生正則表達式

public static String processTemplate(String template, Map<String, Object> params){
    StringBuffer sb = new StringBuffer();
    Matcher m = Pattern.compile("\\$\\{\\w+\\}").matcher(template);
    while (m.find()) {
        String param = m.group();
        Object value = params.get(param.substring(2, param.length() - 1));
        m.appendReplacement(sb, value==null ? "" : value.toString());
    }
    m.appendTail(sb);
    return sb.toString();
}
 
public static void main(String[] args){
    Map map = new HashMap();
    map.put("name", "李四");
    map.put("hour", 3);
    map.put("money", 10);
    String message = processTemplate("您好{name},晚上好!您目前上網時間還剩:{hour}小時,餘額:{money}元", map);
    System.out.println(message);
    //您好李四,晚上好!您目前上網時間還剩:3小時,餘額:10元
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章