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;}//参数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实现的一个简单的模板渲染相关推荐
- 自己写php模板引擎,如何用php编写一个简单的模板引擎(附代码)
php web开发中广泛采取mvc的设计模式,controller传递给view层的数据,必须通过模板引擎才能解析出来.实现一个简单的仅仅包含if,foreach标签,解析$foo变量的模板引擎. 编 ...
- 如何设计 Java 框架?– 一个简单的例子
您可能对框架的工作原理感到好奇?这里将做一个简单的框架示例来演示框架的思想. 框架的目标 首先,为什么我们需要一个框架而不是一个普通的库?框架的目标是定义一个流程,让开发人员根据个人需求实现某些功能. ...
- JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...
用java模拟设计一个简单的"用户注册"程序.当用户输入用户名和密码时,单击"注 2020 - 9 - 26 TAG : 所有功能均已实现,如有不满意的地方我再修改imp ...
- 实现一个简单的模板引擎,输入模板和数据,输出html
实现一个简单的模板引擎,输入模板和数据,输出html 示例: 输入: "<div>{{$1}}({{$2}}){{$3}}</div>",["第一 ...
- JAVA编写的一个简单的Socket实现的HTTP响应服务器
JAVA编写的一个简单的Socket实现的HTTP响应服务器,看后就很容易理解Web服务器的原理了. package test.io;import java.net.*; import java.io ...
- 用java设计实现一个简单的动作冒险类游戏
用java设计实现一个简单的动作冒险类游戏 1.背景 这是java老师布置的本周作业,具体题目截图如下 2.分析 在UML图已经给出的前提下,此作业很容易.自己在此基础上,加了个简单的界面设计和玩家设 ...
- java设计游戏_用java设计实现一个简单的动作冒险类游戏
用java设计实现一个简单的动作冒险类游戏 1.背景 这是java老师布置的本周作业,具体题目截图如下 2.分析 在UML图已经给出的前提下,此作业很容易.自己在此基础上,加了个简单的界面设计和玩家设 ...
- Ray Tracing in One Weekend从零实现一个简单的光线追踪渲染器
Ray Tracing in One Weekend学习笔记 1.Overview 从零开始实现一个简单的光线追踪渲染器,能够实现漫反射材质.金属材质.透明材质的渲染,此外还实现了摄像机的自由移动和焦 ...
- java Swing 做一个简单的输入文本框
java Swing做一个简单的文本输入框, 新建一个SwingDemo类: // //java swing做一个简单的文本框 //Created by lee_1310 on 2019.03.29 ...
最新文章
- 牛逼,国产开源的远程桌面火了,只有9MB,支持自建中继器!
- Raspberry Pi 4B 循迹模块
- 错误 SQL TOP子句中的行数必须是整数
- STL容器的线程安全
- php防伪溯源x系统_区块链溯源防伪追溯系统开发解决方案
- spring缓存与Redis
- 加载字典文件,扫描网站潜在目录
- oppok3如何刷机_OPPO K3刷机教程?
- 基于FPGA的深度学习CNN加速器设计
- Linux 无线网卡驱动安装 Dell Inspiron R14-N4010 笔记本
- win7计算机桌面文件位置更改,Win7系统怎么更改桌面文件路径_win7修改桌面文件保存路径的方法...
- React-Router 刷新后报错 or Cannot GET /detail
- Walking Robot Simulation
- 金山Wps珠海实习杂记(一)
- ROS2_Foxy学习1——前言与安装
- 校园安全教育APP的设计与实现
- 【web学习之Mysql】数据库-----查询操作------大全
- CG插画培训班有哪些
- 软件测试--MonkeyRunner(3)
- 测试京东万象的Webservice接口