Java实现简单的模板渲染
程序员文章站
2024-02-17 16:44:16
本文实例为大家分享了java实现简单的模板渲染,供大家参考,具体内容如下
代码
package com.hdwang;
import java.util....
本文实例为大家分享了java实现简单的模板渲染,供大家参考,具体内容如下
代码
package com.hdwang; import java.util.hashmap; import java.util.map; /** * created by hdwang on 2017/12/19. */ public class mytemplate { public static void main(string[] args){ string template = "${name},${sex},${birthyear}年出生,${graduateyear}年毕业于${university}。"; map<string,string> params = new hashmap<>(); params.put("name","张三"); params.put("sex","男"); params.put("birthyear","1990"); params.put("graduateyear","2012"); params.put("university","清华大学"); long start = system.currenttimemillis(); for(int i=0;i<10000;i++) { string result = render(template, params); if(i==9999) { system.out.println(result); } } long end = system.currenttimemillis(); system.out.println("cost time:"+(end-start)+"ms"); start = system.currenttimemillis(); for(int i=0;i<10000;i++) { string result = render2(template, params); if(i==9999) { system.out.println(result); } } end = system.currenttimemillis(); system.out.println("cost time:"+(end-start)+"ms"); } public static string render(string template,map<string,string> params){ //使用builder拼接,比string相加提高不少效率 stringbuilder builder = new stringbuilder(); //定义控制变量 boolean $begin = false; boolean parambegin = false; //boolean paramend = false; stringbuilder key = null; //循环匹配 for(int i=0;i<template.length();i++){ char c = template.charat(i); //开始标识 if(c=='$'){ $begin = true; } if($begin && c=='{'){ parambegin = true; builder.deletecharat(builder.length()-1); //删除添加的$字符 key = new stringbuilder(); continue; } //参数key if(parambegin && c!='}'){ if(c=='{'){ system.out.println("模板格式错误!位置:"+i); }else { key.append(c); } continue; } //结束标识 if(parambegin && c=='}'){ //paramend = true; //拼接参数key对应的值 builder.append(params.get(key.tostring())); //重置控制变量 $begin = false; parambegin = false; //paramend = false; continue; } //默认情况 builder.append(c); //添加字符 } return builder.tostring(); } public static string render2(string template,map<string,string> params){ for(map.entry<string,string> entry:params.entryset()){ string key = entry.getkey(); string value = entry.getvalue(); template = template.replace("${"+key+"}",value); } return template; } }
运行结果
张三,男,1990年出生,2012年毕业于清华大学。
cost time:65ms
张三,男,1990年出生,2012年毕业于清华大学。
cost time:161ms
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。