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}\n标题:${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