輕量的郵件、短信模板渲染功能

有時候就是需要一個很簡單的模板渲染功能,就是一些固定的參數,然後將參數替換掉。如郵件模板、短信模板等等,這些模板內容比較單一,文字不多,變量類型單一,同時沒有上下文的約束。如果我們使用如 velocity 這類模板引擎來做這個事情,相對來說還是重了一點。其實這類功能還是比較簡單的,完全可以手寫。以下是我寫的一個方法,歡迎指正和學習,留言全接。

 

public class RenderUtils {

    private static final Pattern p = Pattern.compile("\\$\\{\\s*([a-zA-Z0-9_\\-]+)\\s*\\}");

    public static String renderText(String templateContent, Map<String, String> params) {
        if (StringUtils.isBlank(templateContent)) {
            return null;
        }
        if (params == null || params.isEmpty()) {
            return templateContent.toString();
        }
        StringBuffer sb = new StringBuffer();
        try {
            Matcher matcher = p.matcher(templateContent);
            while (matcher.find()) {
                int groupCount = matcher.groupCount();
                if (groupCount < 1) {
                    continue;
                }
                //String group0 = matcher.group(0);
                String group1 = matcher.group(1);
                String replacement;
                if (params.containsKey(group1)) {
                    replacement = params.get(group1).toString();
                } else {
                    replacement = "[-no value for '" + group1 + "'-]";
                }
                matcher.appendReplacement(sb, replacement);
            }
            matcher.appendTail(sb);
        } catch (Exception e) {
            e.printStackTrace();
            return templateContent.toString();
        }
        return sb.toString();
    }
}

這裏的功能不強大,但是夠用。就是將 ${abc} 作爲一個需要替換的內容,一旦參數中有 key=abc 的內容,就會將其替換。

支持 ${abc} 或者 ${ abc }, 中間允許一個或多個空格。

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