System.out.println(render);
}
}
输出结果
[code, name]
恭喜您:小王注册成功人人app,您的账号为:125284588
package util;
import java.util.*;
/**
-
非常非常简单的模板实现
-
@author desheng.tu
-
@date 2015年6月23日 下午4:38:05
*/
public class SimpleTmpl {
public static void main(String[] args) {
String t1 = “恭喜您 n a m e name name, 注册成功人人app,您的账号为: c o d e code code”;
String t2 = “你好 #{name}, 您的验证码是:${code}”;
Map<String,String> param=new HashMap<>();
param.put(“name”, “小王”);
param.put(“code”, “13252623145”);
for (int i = 0; i < 100; i++) {
SimpleTempletUtil.render(t1, param);
Templ.of(t2).render(param);
}
String result = “”;
long start = 0;
start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
param.put(“code”, i+“”);
result = SimpleTempletUtil.render(t1, param);
}
System.out.println(System.currentTimeMillis() - start);
System.out.println(result);
start = System.currentTimeMillis();
Templ templ = Templ.of(t2);
for (int i = 0; i < 100000; i++) {
param.put(“code”, i+“”);
result = templ.render(param);
}
System.out.println(System.currentTimeMillis() - start);
System.out.println(result);
}
}
abstract class Exp {
abstract String resolve(Map<String, String> context);
static Exp of(String exp) {
Objects.requireNonNull(exp);
if (exp.startsWith(“#{”) || exp.startsWith(“${”)) {
return new VarExp(exp);
}
return new StrExp(exp);
}
}
class StrExp extends Exp {
private String value;
StrExp(String exp) {
this.value = exp;
}
@Override
public String resolve(Map<String, String> context) {
return this.value;
}
@Override
public String toString() {
return “StrExp [value=” + value + “]”;
}
}
class VarExp extends Exp {
private String varName;
private String defaultValue;
private Boolean nullable = false;
VarExp(String varName, String defaultValue, Boolean nullable) {
this.varName = varName;
this.defaultValue = defaultValue;
this.nullable = nullable;
}
VarExp(String exp) {
Objects.requireNonNull(exp);
if (!(exp.startsWith(“#{”) || exp.startsWith(“${”)) || !exp.endsWith(“}”)) {
throw new IllegalArgumentException(“表达式[” + exp + “]必须类似于#{}或${}”);
}
String[] nodes = exp.substring(2, exp.length() - 1).split(“,”);
if (nodes.length > 2) {
throw new IllegalArgumentException(“表达式[” + exp + “]只能出现一个’,'”);
}
this.varName = nodes[0].trim();
this.defaultValue = nodes.length == 2 ? nodes[1].trim() : “”;
this.nullable = exp.startsWith(“$”);
}
@Override
public String resolve(Map<String, String> context) {
String value = context.get(varName);
if (value == null && nullable) {
value = defaultValue == null ? “” : defaultValue;
}
if (value == null) {
throw new NullPointerException(“上下文中没有指定的变量:var=” + varName + " map=" + context);
}
return value;
}
@Override
public String toString() {
return “VarExp [varName=” + varName + “, defaultValue=” + defaultValue + “, nullable=”
- nullable + “]”;
}
}
class Templ {
private List exps = new ArrayList<>();
static Templ of(String templStr) {
Objects.requireNonNull(templStr, “模板为空”);
Templ templ = new Templ();
StringBuilder sb = new StringBuilder();
char[] chars = templStr.toCharArray();
for (int i = 0; i < chars.length; i++) {
switch (chars[i]) {
case ‘#’:
case ‘$’:
if(i < chars.length - 1 && chars[i+1] == ‘{’){
templ.addExp(Exp.of(sb.toString()));
sb.setLength(0);
}
sb.append(chars[i]);
break;
case ‘}’:
sb.append(‘}’);
if(sb.length() > 1 && sb.charAt(1) == ‘{’){
templ.addExp(Exp.of(sb.toString()));
sb.setLength(0);
}
break;
default:
sb.append(chars[i]);
break;
}
}
if(sb.length() > 0){
templ.addExp(Exp.of(sb.toString()));
}
return templ;
}
private Templ addExp(Exp exp) {
Objects.requireNonNull(exp, “表达式为空”);
exps.add(exp);
return this;
}
String render(Map<String, String> context) {
StringBuilder sb = new StringBuilder(128);
for (Exp exp : exps) {
sb.append(exp.resolve(context));
}
return sb.toString();
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
同时减轻大家的负担。**
[外链图片转存中…(img-pRW9kptI-1715755588502)]
[外链图片转存中…(img-chytfr80-1715755588502)]
[外链图片转存中…(img-R30Gl9hK-1715755588503)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!