Java组合Html前端代码

业务需求

数据库中以Text储存Html模板代码,对于动态内容部分以固定格式表示。每次通过后端代码组装传给前端获得固定模板的动态内容界面。

Code

package cn.zlb.fe.server;

import org.junit.Test;

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

import static java.util.regex.Pattern.compile;

/**
 * @Author Yuri
 * @Date 2021/4/15 11:24
 * @Version 1.0
 * @Description:
 */
public class Main {
    
    public static void main(String[] args) {
        String test = "内容:${content}
标题:${title}";
        Map<String, Object> map = new HashMap<>();
        map.put("content", "上");
        map.put("title", "下");
        contentFormat(test, map);
    }

    public static String contentFormat(String content, Map<String, Object> kvs) {
        Pattern p = compile("\$\{(.*?)}"); //Pattern类用于创建一个正则表达式
        Matcher m = p.matcher(content); //Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持
        StringBuffer sr = new StringBuffer(); //StringBuffer可变字符序列
        while (m.find()) { //逐个找到满足匹配的串${xxx}
            String group = m.group(); //组是用括号划分的正则表达式,可以根据组的编号来引用这个组。组号为0表示整个表达式,组号为1表示被第一对括号括起的组,依次类推,例如A(B(C))D,组0是ABCD,组1是BC,组2是C。
            String key = group.substring(2, group.length() - 1);//从${xxx}获取xxx
            String value = String.valueOf(kvs.get(key));
            if (null != value) {
                m.appendReplacement(sr, value);//将匹配的字符串保存在另一个StringBuffer中并且是渐进式匹配
            }
        }
        m.appendTail(sr);//appendTail是将未匹配到的余下的字符串添加到StringBuffer
        return sr.toString();
    }
}

参考

Pattern和Matcher用法:https://blog.csdn.net/weixin_42868638/article/details/82721489

原文地址:https://www.cnblogs.com/AkimotoAkira/p/14661676.html