本文实例为大家分享了Java实现简单的模板渲染,供大家参考,具体内容如下
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/hdwang/p/8064440.html