import org.joda.time.DateTime; java
public String convertTemplate2Content(String id){ User user = userService.getUserById(id);//演示代碼此行能夠忽略 String content = "{name}在{date}提交了一份代碼,裏面第{line}有不少bug"; // 正則表達式 尋找 大括號內的 數據 Pattern pattern = Pattern.compile("(?<=\\{)(.+?)(?=\\})"); Matcher matcher = pattern.matcher(content); Map<String, Object> map = Bean2Map.beanToMap(user); // 遍歷全文 while (matcher.find()) { String field = matcher.group(); // 用來替換 {字段} 的正則 String replace = "\\{" + field + "\\}"; Object object = map.get(field); if (object == null) { return "數據模板字段輸入錯誤"; } // 時間類型格式化後轉字符串 if (object instanceof java.util.Date) { Date date = (java.util.Date) object; object = new DateTime(date).toString("yyyy-MM-dd HH:mm:ss"); } String replaceAll = content.replaceAll(replace, object.toString()); content = replaceAll; } return content; }
/** * javaBean 轉 Map * * @param object * 須要轉換的javabean * @return 轉換結果map * @throws Exception */ public static Map<String, Object> beanToMap(Object object) throws Exception { Map<String, Object> map = new HashMap<String, Object>(); Class<? extends Object> cls = object.getClass(); Field[] fields = cls.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); map.put(field.getName(), field.get(object)); } return map; }