【Java工具类】替换字符串占位符{xxx}、${xxx}工具类

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

public class StringTemplateUtil {
    
    
    public static final String DEF_REGEX_1 = "\\{(.+?)\\}";
    public static final String DEF_REGEX_2 = "\\$\\{(.+?)\\}";

    public static String render(String template, Map<String, String> data) {
    
    
        return render(template, data, DEF_REGEX_1);
    }

    public static String render(String template, Map<String, String> data, String regex) {
    
    
        if (template == null || template.trim().isEmpty()) {
    
    
            return "";
        }

        if (regex == null || regex.trim().isEmpty()) {
    
    
            return template;
        }

        if (data == null || data.size() == 0) {
    
    
            return template;
        }

        try {
    
    
            StringBuffer appendReplaceSb = new StringBuffer();
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(template);

            while (matcher.find()) {
    
    
                // String currentStr = matcher.group(0);//整个正则匹配的字符串
                String key = matcher.group(1);//当前第一个子分组正则匹配的字符串
                String value = data.get(key);

                 /*Matcher. appendReplacement:将当前匹配的子字符串替换为指定的字符串,并且将替换后的字符串
                及其之前到上次匹配的子字符串之后的字符串添加到一个StringBuffer对象中。*/
                matcher.appendReplacement(appendReplaceSb, value);//
            }


            /*   Matcher. appendTail:将最后一次匹配之后的字符串添加到一个StringBuffer对象中。*/
            matcher.appendTail(appendReplaceSb);
            return appendReplaceSb.toString();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }

        return template;
    }
}

猜你喜欢

转载自blog.csdn.net/qq877728715/article/details/115213236