欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)簡單的模板渲染

 更新時間:2017年12月19日 13:45:09   作者:追極  
這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單的模板渲染的相關(guā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);
   //開始標(biāo)識
   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é)束標(biāo)識
   if(paramBegin && c=='}'){
    //paramEnd = true;
    //拼接參數(shù)key對應(yīng)的值
    builder.append(params.get(key.toString()));

    //重置控制變量
    $Begin = false;
    paramBegin = false;
    //paramEnd = false;
    continue;
   }

   //默認(rèn)情況
   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;
 }
}

運(yùn)行結(jié)果

張三,男,1990年出生,2012年畢業(yè)于清華大學(xué)。
cost time:65ms
張三,男,1990年出生,2012年畢業(yè)于清華大學(xué)。
cost time:161ms

 以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot+Oauth2實現(xiàn)自定義AuthenticationManager和認(rèn)證path

    springboot+Oauth2實現(xiàn)自定義AuthenticationManager和認(rèn)證path

    本篇文章主要介紹了springboot+Oauth2實現(xiàn)自定義AuthenticationManager和認(rèn)證path,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • java使用Nagao算法實現(xiàn)新詞發(fā)現(xiàn)、熱門詞的挖掘

    java使用Nagao算法實現(xiàn)新詞發(fā)現(xiàn)、熱門詞的挖掘

    這篇文章主要介紹了java使用Nagao算法實現(xiàn)新詞發(fā)現(xiàn)、熱門詞的挖掘的思路和詳細(xì)代碼,需要的朋友可以參考下
    2015-07-07
  • Springboot簡單熱部署實現(xiàn)步驟解析

    Springboot簡單熱部署實現(xiàn)步驟解析

    這篇文章主要介紹了Springboot簡單熱部署實現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • spring boot + mybatis實現(xiàn)動態(tài)切換數(shù)據(jù)源實例代碼

    spring boot + mybatis實現(xiàn)動態(tài)切換數(shù)據(jù)源實例代碼

    這篇文章主要給大家介紹了關(guān)于spring boot + mybatis實現(xiàn)動態(tài)切換數(shù)據(jù)源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Spring注入Map集合實現(xiàn)策略模式詳解

    Spring注入Map集合實現(xiàn)策略模式詳解

    這篇文章主要介紹了Spring注入Map集合實現(xiàn)策略模式詳解,Spring提供通過@Resource注解將相同類型的對象注入到Map集合,并將對象的名字作為key,對象作為value封裝進(jìn)入Map,需要的朋友可以參考下
    2023-11-11
  • Java線程安全中的有序性淺析

    Java線程安全中的有序性淺析

    這篇文章主要介紹了Java線程安全中的有序性,在開發(fā)中,我們通常按照從上到下的順序編寫程序指令,并且希望cpu和編譯器按照我們預(yù)先編寫的順序去執(zhí)。但往往cpu和編譯器為了提高性能、優(yōu)化指令的執(zhí)行順序,會將我們編寫好的程序指令進(jìn)行重排序
    2023-02-02
  • 關(guān)于Java虛擬機(jī)HotSpot

    關(guān)于Java虛擬機(jī)HotSpot

    這篇文章主要介紹了關(guān)于Java虛擬機(jī)HotSpot,在Java類中的一些方法會被由C/C++編寫的HotSpot虛擬機(jī)的C/C++函數(shù)調(diào)用,不過由于Java方法與C/C++函數(shù)的調(diào)用約定不同,所以并不能直接調(diào)用,需要JavaCalls::call()這個函數(shù)輔助調(diào)用,下面我們來看看文章對內(nèi)容的具體介紹
    2021-11-11
  • 使用Mybatis-plus清空表數(shù)據(jù)的操作方法

    使用Mybatis-plus清空表數(shù)據(jù)的操作方法

    MyBatis 是一個基于 java 的持久層框架,它內(nèi)部封裝了 jdbc,極大提高了我們的開發(fā)效率,文中給大家介紹了MybatisPlus常用API-增刪改查功能,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • SpringSecurity實現(xiàn)動態(tài)加載權(quán)限信息的方法

    SpringSecurity實現(xiàn)動態(tài)加載權(quán)限信息的方法

    這篇文章主要介紹了SpringSecurity實現(xiàn)動態(tài)加載權(quán)限信息,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定需要的朋友可以參考下
    2022-01-01
  • 使用jdk7的nio2操作文件拷貝和剪切示例

    使用jdk7的nio2操作文件拷貝和剪切示例

    使用jdk7的NIO2進(jìn)行文件或文件夾的拷貝移動操作??梢宰詣觿?chuàng)建路徑,差異化更新文件,簡單的出錯重連機(jī)制
    2014-01-01

最新評論