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
Java实现的一个简单的模板渲染的更多相关文章
- 一个简单的模板引(han)擎(shu)
自制一个简单的模板引(han)擎(shu) 原理 说大了 实际上是模板函数 原理呢就是简单的字符串替换 第一版 var data = { username: 'Muhha' } str = '< ...
- JAVA课程设计——一个简单的教务人事管理系统
大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...
- 使用JAVA实现的一个简单IOC注入实例
https://blog.csdn.net/echoshinian100/article/details/77977823 欲登高而望远,勿筑台于流沙 RSS订阅 原 使用JAVA实现的一个简单IOC ...
- 使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传
使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能.并且在界面上有radio 的选择内容也要上传 uploadify 插件的 下载和文档地址 ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇
本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google file system),首先整体简单介绍下该项目. [为了更好的阅读以及查看其他篇章,请查看原文:https://w ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——背景与设计篇
目录 背景 系统设计 1. 系统功能 2. Master组件 2.1 命名空间 2.2 心跳机制 2.3 故障恢复和容错机制 3. ChunkServer组件 3.1 本地存储 3.2 内存命中机制 ...
- Java Swing实现一个简单而优美的记事本( 较详细注释 )
Java Swing实现具有基本功能的记事本 目前实现了: 文件 新建 打开 保存 退出前保存询问 编辑 剪切 复制 粘贴 清除 撤销 格式 字体选择 字体颜色选择 帮助 关于 (样式采用了css与h ...
- 【Java】 实现一个简单文件浏览器(1)
学习Java的Swing的时候写的一个超简单文件浏览器 效果如图: 项目结构: 这里面主要用了两个控件,JTree和JTable 下面先说下左侧的文件树如何实现: 首先是FileTree类,继承于JT ...
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, cl ...
随机推荐
- 2017-2018-1 20155232 嵌入式C语言——时钟
2017-2018-1 20155232 嵌入式C语言--时钟 任务: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清 ...
- MySql+Socket 完成数据库的增查Demo
需求: 利用MySql数据库结合前端技术完成用户的注册(要求不使用Web服务技术),所以 Demo采用Socket技术实现Web通信. 第一部分:数据库创建 数据库采用mysql 5.7.18, 数据 ...
- Linux常用rmp包网址
* HA:http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/ * Openstack:https://r ...
- C语言中指针占据内存空间问题
以前一直有个疑问,指向不同类型的指针到底占用的内存空间是多大呢? 这个问题我多次问过老师,老师的答案是"指向不同类型的指针占据的内存空间大小不同",我一直很之一这个答案,今天我就做 ...
- C#_添加xml文件
引用:System.Xml; XmlDocument doc = new XmlDocument(); XmlElement Root = doc.CreateElement("Root&q ...
- 软件测试----H模型
H模型将测试活动完全独立出来,形成一个完整的流程,同时将测试准备和测试执行清晰表现出来. 测试流程: --测试准备:所有测试活动的准备判断是否到测试就绪点. --测试就绪点:测试准入准则,即是否可以开 ...
- 教你用PS制作雨天窗户上透明水滴字
雨天窗户上透明水滴字制作方法很简单,主要利用图层样式来实现.学习后可以让你对图层样式有更好的了解,认识. 先看下完成后的效果图: 步骤1: 在Photoshop中我们新建或Ctrl+N,创建1920x ...
- [SHELL]输入输出重定向与管道
一 . 输出重定向(将命令的输出重定向到文件): ls -al > test 以覆盖的方式写入 ls -al >> test 以追加的方式写入 二 . 输入重定向(将文件的内容重定向 ...
- Redmine 安装指南
第一种方式 (一键安装): 准备工作: 1.最小化安装CentOS7 2.更新YUM源 3.更新系统关闭防火墙 yum -y update systemctl stop firewalld syste ...
- PAT甲题题解-1043. Is It a Binary Search Tree (25)-二叉搜索树
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789220.html特别不喜欢那些随便转载别人的原创文章又不给 ...