配置文件或者模板中的占位符替换工具类

来源:互联网 发布:美军单兵口粮淘宝 编辑:程序博客网 时间:2024/06/09 21:48

有时候,很多文本存入数据库或者文件中,某些变量或者模板中会存在占位符的情况,然而每次读取,一个个去字符串.replace去替换就很麻烦,于是写个占位符替换工具类


具体代码:


import java.util.HashMap;import java.util.Map;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 配置文件或模板中的占位符替换工具类 * Date: 15-5-8 * Time: 下午4:12 */public class PlaceholderUtils {private static final Logger logger = LoggerFactory.getLogger(PlaceholderUtils.class);/** * Prefix for system property placeholders: "${" */public static final String PLACEHOLDER_PREFIX = "${";/** * Suffix for system property placeholders: "}" */public static final String PLACEHOLDER_SUFFIX = "}";public static String resolvePlaceholders(String text, Map<String, String> parameter) {if (parameter == null || parameter.isEmpty()) {return text;}StringBuffer buf = new StringBuffer(text);int startIndex = buf.indexOf(PLACEHOLDER_PREFIX);while (startIndex != -1) {int endIndex = buf.indexOf(PLACEHOLDER_SUFFIX, startIndex + PLACEHOLDER_PREFIX.length());if (endIndex != -1) {String placeholder = buf.substring(startIndex + PLACEHOLDER_PREFIX.length(), endIndex);int nextIndex = endIndex + PLACEHOLDER_SUFFIX.length();try {String propVal = parameter.get(placeholder);if (propVal != null) {buf.replace(startIndex, endIndex + PLACEHOLDER_SUFFIX.length(), propVal);nextIndex = startIndex + propVal.length();} else {logger.warn("Could not resolve placeholder '" + placeholder + "' in [" + text + "] ");}} catch (Exception ex) {logger.warn("Could not resolve placeholder '" + placeholder + "' in [" + text + "]: " + ex);}startIndex = buf.indexOf(PLACEHOLDER_PREFIX, nextIndex);} else {startIndex = -1;}}return buf.toString();}public static void main(String[] args) {String aa= "我们都是好孩子,${num}说是嘛? 我觉得${people}是傻蛋!";Map<String, String> map = new HashMap<String, String>();map.put("num","小二比");map.put("people","小明");System.out.println(PlaceholderUtils.resolvePlaceholders(aa, map));}}


输出结果:

我们都是好孩子,小二比说是嘛? 我觉得小明是傻蛋



1 0