天天看點

java解析{{}}變量名以及文本内容替換操作

/**
 * 根據正規表達式擷取文本中的變量名清單
 * @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);
}