發短信、發郵件的時候經常會遇到模板內容需要替換成實際數據的問題,本文介紹從文本模板中解析出變量列表,以及參數填入後得到實際文本內容的辦法:
/**
* 根據正則表達式獲取文本中的變量名列表
* @param pattern
* @param content
* @return
*/
public static List<String> getParams(String pattern, String content) {
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(content);
List<String> result = new ArrayList<String>();
while (m.find()) {
result.add(m.group(1));
}
return result;
}
/**
* 根據正則表達式將文本中的變量使用實際的數據替換成無變量的文本
* @param pattern
* @param content
* @param data
* @return
*/
public static String parse(String pattern, String content, Map<String, String> data) {
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(content);
StringBuffer sb = new StringBuffer();
while (m.find()) {
String key = m.group(1);
String value = data.get(key);
m.appendReplacement(sb, value == null ? "" : value);
}
m.appendTail(sb);
return sb.toString();
}
public static void main(String[] args) {
String content = "恭喜{{姓名}}報名成功,請憑報名編號{{code}}到現場參加活動";
String reg = "\\{\\{(.+?)\\}\\}";
List<String> params = getParams(reg, content);
System.out.println(params);
Map<String, String> data = new HashMap<String, String>();
data.put("姓名", "張三丰");
data.put("code", "930118");
String text = parse(reg, content, data);
System.out.println(text);
}
上面的代碼介紹的是針對{{}}形式的變量值的解析辦法,大家可以修改一下正則表達式,改成可以解析${}變量的辦法
本文內容到此結束。