Java實現(xiàn)簡單的模板渲染
本文實例為大家分享了Java實現(xiàn)簡單的模板渲染,供大家參考,具體內(nèi)容如下
代碼
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}年畢業(yè)于${university}。";
Map<String,String> params = new HashMap<>();
params.put("name","張三");
params.put("sex","男");
params.put("birthYear","1990");
params.put("graduateYear","2012");
params.put("university","清華大學(xué)");
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;
//循環(huán)匹配
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;
}
//參數(shù)key
if(paramBegin && c!='}'){
if(c=='{'){
System.out.println("模板格式錯誤!位置:"+i);
}else {
key.append(c);
}
continue;
}
//結(jié)束標識
if(paramBegin && c=='}'){
//paramEnd = true;
//拼接參數(shù)key對應(yīng)的值
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;
}
}
運行結(jié)果
張三,男,1990年出生,2012年畢業(yè)于清華大學(xué)。
cost time:65ms
張三,男,1990年出生,2012年畢業(yè)于清華大學(xué)。
cost time:161ms
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JAVA velocity模板引擎使用實例
- 使用Java進行FreeMarker的web模板開發(fā)的基礎(chǔ)教程
- java根據(jù)模板動態(tài)生成PDF實例
- 基于Java的Spring框架來操作FreeMarker模板的示例
- Java設(shè)計模式之模板模式(Template模式)介紹
- Java根據(jù)模板導(dǎo)出Excel報表并復(fù)制模板生成多個Sheet頁
- Java操作FreeMarker模板引擎的基本用法示例小結(jié)
- 詳解java模板和回調(diào)機制
- 微信支付java版本之JSAPI支付+發(fā)送模板消息
- Java用正則表達式實現(xiàn)${name}形式的字符串模板實例
相關(guān)文章
Java實現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計并輸出每個單詞出現(xiàn)次數(shù)的方法
這篇文章主要介紹了Java實現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計并輸出每個單詞出現(xiàn)次數(shù)的方法,涉及java文件I/O操作及字符串遍歷、運算實現(xiàn)統(tǒng)計功能相關(guān)技巧,需要的朋友可以參考下2017-07-07
SpringBoot整合Guava Cache實現(xiàn)全局緩存的示例代碼
這篇文章主要介紹了SpringBoot整合Guava Cache實現(xiàn)全局緩存,Guava Cache是Google Guava庫中的一個模塊,提供了基于內(nèi)存的本地緩存實現(xiàn),文中介紹了SpringBoot整合使用Guava Cache的具體步驟,需要的朋友可以參考下2024-03-03
spring.mvc.servlet.load-on-startup屬性方法源碼解讀
這篇文章主要介紹了spring.mvc.servlet.load-on-startup的屬性方法源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
Java 動態(tài)代理你真的懂了嗎(動態(tài)和代理)
動態(tài)代理分兩部分,動態(tài)和代理,今天通過本文給大家普及代碼模式及動態(tài)代理的概念及示例代碼,感興趣的朋友跟隨小編一起看看吧2021-07-07

