首页 > 开发 > Java > 正文

Java实现简单的模板渲染

2024-07-13 10:14:58
字体:
来源:转载
供稿:网友

本文实例为大家分享了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

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表