原理:使用正则进行匹配

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 自定义简单模板引擎<br /><br />
 * <p>
 * 模板变量:${key}
 * 如果需要显示包含模板变量的原始字符串,可以使用`模板变量`,如<br /><br />
 * <b>String template = "ABC=`${keyA}`"</b>;<br /><br />
 * 表示<b>${keyA}</b>为原始字符串,最终结果为<br /><br />
 *
 * <b>ABC=${keyA}</b>
 */
public class TemplateEngine {
    private static final Pattern pattern = Pattern.compile("(\\$\\{(.*?)\\})|(`(\\s*?)\\$\\{(.*?)\\}(\\s*?)`)|(`.*`)");
    private static Matcher matcher;

    public static String getMessage(String content, Map<String, String> values) {
        matcher = pattern.matcher(content);
        String matched = null;
        String key = null;
        String value = null;
        while (matcher.find()) {
            matched = matcher.group();
            if (matched.trim().startsWith("`")) { // 原始字符串
                value = matched.substring(1, matched.length() - 1);
                content = content.replace(matched, value);
            } else {
                key = matched.trim().substring(2, matched.length() - 1).trim();
                value = values.get(key);
                if (key.length() > 0 && null != value) { // 排除空表达式
                    content = content.replace(matched, value);
                } else if (key.length() == 0) { // 空表达式
                    content = content.replace(matched, "");
                }
            }
        }

        return content;
    }

    public static void main(String[] args) throws Exception {
        String content = "aaaa-${  xxx.x1   }-bbbb-${    }empty-`${   xxx.x2  }`reserve-`${}`reserve-${xxx.x3}-``-${xxx.x.x4}";
        Map<String, String> values = new HashMap<>();
        values.put("xxx.x1", "AAA");
        values.put("xxx.x2", "BBB");
        values.put("xxx.x3", "CCC");
        values.put("xxx.x.x4", "DDD");
        System.out.println(getMessage(content, values)); // aaaa-AAA-bbbb-empty-${   xxx.x2  }reserve-${}reserve-CCC--DDD
    }
}