代码

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;}//参数keyif(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

转载于:https://www.cnblogs.com/hdwang/p/8064440.html

Java实现的一个简单的模板渲染相关推荐

  1. 自己写php模板引擎,如何用php编写一个简单的模板引擎(附代码)

    php web开发中广泛采取mvc的设计模式,controller传递给view层的数据,必须通过模板引擎才能解析出来.实现一个简单的仅仅包含if,foreach标签,解析$foo变量的模板引擎. 编 ...

  2. 如何设计 Java 框架?– 一个简单的例子

    您可能对框架的工作原理感到好奇?这里将做一个简单的框架示例来演示框架的思想. 框架的目标 首先,为什么我们需要一个框架而不是一个普通的库?框架的目标是定义一个流程,让开发人员根据个人需求实现某些功能. ...

  3. JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...

    用java模拟设计一个简单的"用户注册"程序.当用户输入用户名和密码时,单击"注 2020 - 9 - 26 TAG : 所有功能均已实现,如有不满意的地方我再修改imp ...

  4. 实现一个简单的模板引擎,输入模板和数据,输出html

    实现一个简单的模板引擎,输入模板和数据,输出html 示例: 输入: "<div>{{$1}}({{$2}}){{$3}}</div>",["第一 ...

  5. JAVA编写的一个简单的Socket实现的HTTP响应服务器

    JAVA编写的一个简单的Socket实现的HTTP响应服务器,看后就很容易理解Web服务器的原理了. package test.io;import java.net.*; import java.io ...

  6. 用java设计实现一个简单的动作冒险类游戏

    用java设计实现一个简单的动作冒险类游戏 1.背景 这是java老师布置的本周作业,具体题目截图如下 2.分析 在UML图已经给出的前提下,此作业很容易.自己在此基础上,加了个简单的界面设计和玩家设 ...

  7. java设计游戏_用java设计实现一个简单的动作冒险类游戏

    用java设计实现一个简单的动作冒险类游戏 1.背景 这是java老师布置的本周作业,具体题目截图如下 2.分析 在UML图已经给出的前提下,此作业很容易.自己在此基础上,加了个简单的界面设计和玩家设 ...

  8. Ray Tracing in One Weekend从零实现一个简单的光线追踪渲染器

    Ray Tracing in One Weekend学习笔记 1.Overview 从零开始实现一个简单的光线追踪渲染器,能够实现漫反射材质.金属材质.透明材质的渲染,此外还实现了摄像机的自由移动和焦 ...

  9. java Swing 做一个简单的输入文本框

    java Swing做一个简单的文本输入框, 新建一个SwingDemo类: // //java swing做一个简单的文本框 //Created by lee_1310 on 2019.03.29 ...

最新文章

  1. 牛逼,国产开源的远程桌面火了,只有9MB,支持自建中继器!
  2. Raspberry Pi 4B 循迹模块
  3. 错误 SQL TOP子句中的行数必须是整数
  4. STL容器的线程安全
  5. php防伪溯源x系统_区块链溯源防伪追溯系统开发解决方案
  6. spring缓存与Redis
  7. 加载字典文件,扫描网站潜在目录
  8. oppok3如何刷机_OPPO K3刷机教程?
  9. 基于FPGA的深度学习CNN加速器设计
  10. Linux 无线网卡驱动安装 Dell Inspiron R14-N4010 笔记本
  11. win7计算机桌面文件位置更改,Win7系统怎么更改桌面文件路径_win7修改桌面文件保存路径的方法...
  12. React-Router 刷新后报错 or Cannot GET /detail
  13. Walking Robot Simulation
  14. 金山Wps珠海实习杂记(一)
  15. ROS2_Foxy学习1——前言与安装
  16. 校园安全教育APP的设计与实现
  17. 【web学习之Mysql】数据库-----查询操作------大全
  18. CG插画培训班有哪些
  19. 软件测试--MonkeyRunner(3)
  20. 测试京东万象的Webservice接口

热门文章

  1. iOS高德地图SDK定位和搜索附近信息的具体使用
  2. SpringBoot使用ELK日志收集
  3. html5--5-4 绘制矩形
  4. 在Winform开发中使用FastReport创建报表
  5. 数据结构与算法-----数据结构-----2-3-4树以及外部存储
  6. Zabbix二次开发_03api列表
  7. Less入门与安装(转)
  8. Java操作Mongodb 保存/读取java对象到/从mongodb
  9. scriptalert(1)/script
  10. 要啥网·商信:一款让所有商业活动一步跨入移动互联时代的APP