文档章节

自己编写的Java StringFormat工具类

zero2hero
 zero2hero
发布于 2014/07/30 20:46
字数 456
阅读 54
收藏 0
import java.util.Map;

/**
 * format a string like:${name} is a good ${gender}, with values which is a Map. 
 * @author wanglu
 * @date 2014-7-22
 * @email wanglu.zero@gmail.com
 * @version 1.0
 */
public class StringFormat {
	private String template;
	private String prefix;
	private String suffix;
	private final static String PLACEHOLDER_PREFIX = "\\$\\{";
	private final static String PLACEHOLDER_SUFFIX = "\\}";
	private final static String PLACEHOLDER_PATTERN = ".*"+PLACEHOLDER_PREFIX+".*"+PLACEHOLDER_SUFFIX+".*";
	
	/**
	 * equals StringFormat(template, "", "", true)
	 * @param template
	 */
	public StringFormat(String template){
		this(template, "", "", true);
	}
	
	/**
	 * equals StringFormat(template,"","", isCheckPlaceHolder)
	 * @param template
	 */
	public StringFormat(String template, boolean isCheckPlaceHolder){
		this(template,"","", isCheckPlaceHolder);
	}
	
	/**
	 * equals StringFormat(template, prefix, "", true)
	 * @param template
	 */
	public StringFormat(String template, String prefix){
		this(template, prefix, "", true);
	}
	
	
	/**
	 * equals StringFormat(template, prefix, suffix, true)
	 * @param template
	 */
	public StringFormat(String template, String prefix, String suffix){
		this(template, prefix, suffix, true);
	}
	
	
	/**
	 * equals StringFormat(template, prefix, "", isCheckPlaceHolder)
	 * @param template
	 */
	public StringFormat(String template, String prefix, boolean isCheckPlaceHolder){
		this(template, prefix, "", isCheckPlaceHolder);
	}
	
	/**
	 * @param template 字符串模板
	 * @param prefix 前缀
	 * @param suffix 后缀
	 * @param isCheckPlaceHolder, when is true, template at least has one placeholder,otherwise will throw a exception
	 */
	public StringFormat(String template, String prefix, String suffix, boolean isCheckPlaceHolder){
		if(template == null || template.trim().equals("")){
			throw new IllegalArgumentException("template can't be null or empty or blank");
		}
		
		if( isCheckPlaceHolder && !hasPlaceHolder(template) ){
			throw new IllegalArgumentException("template has not any placeholder");
		}
		
		this.template = template;
		
		this.prefix = (prefix == null ? "" : prefix);
		this.suffix = (suffix == null ? "" : suffix);
	}
	
	/**
	 * 核心方法
	 * @param values Map类型的值
	 * @return 替换好的字符串
	 * @throws Exception
	 */
	public String format(Map<?,?> values) throws Exception{
		return format(values, true);
	}
	
	/**
	 * 
	 * @param values
	 * @param isCheckReplaceAll, after replace,check template has any placehoder
	 * @return String
	 * @throws Exception
	 */
	public String format(Map<?,?> values, boolean isCheckReplaceAll) throws Exception{
		if( values == null ){
			throw new NullPointerException("values can't be null");
		}
		
		String template = this.template;
		for (Object key : values.keySet() ) {
			
			String value = this.prefix + values.get(key).toString() + this.suffix;
			
			template = template.replaceAll( getPlaceHolder(key.toString()) , value);
        }
		if( isCheckReplaceAll && hasPlaceHolder(template) ){
			throw new Exception("does not replace all placeholder");
		}
		
		return template;
	}
	
	public String getTemplate(){
		return this.template;
	}
	
	private static String getPlaceHolder(String key){
		if( key == null ){
			throw new NullPointerException("key can't be null");
		}
		
		return PLACEHOLDER_PREFIX + key + PLACEHOLDER_SUFFIX;
	}
	
	
	private static boolean hasPlaceHolder(String value){
		if( value == null ){
			throw new NullPointerException("value can't be null");
		}
		return value.matches( PLACEHOLDER_PATTERN );
	}
}


© 著作权归作者所有

zero2hero
粉丝 5
博文 17
码字总数 11137
作品 0
徐汇
架构师
私信 提问
编写高质量代码:改善Java程序的151个建议

本系列是用来记录《编写高质量代码 改善java程序的151个建议》这本书的读书笔记。方便自己查看,也方便大家查阅。 全书共12章,共有151条建议,其中1~3章针对java语法本身提出了51条建议;第4...

青衣霓裳
07/09
526
3
深度探讨Java字节代码的操纵方法

本文为IBM工程师成富编写的《Java深度历险》的第一部分Java字节代码的操纵,像这样Java语言的深度理解和运用还没有很多文章,我们把他奉献给读者,希望读者们喜欢。 51CTO编者按:我们曾给大...

mj4738
2011/11/02
351
0
Eclipse中怎么将JRE换成JDK

关于JDK 和 JRE 的介绍 JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。 JDK顾名思义...

不开心时不要学习
2017/09/10
2.9K
0
编写你的第一个HelloWorld

写在前面的话 因为Java基础是以后学习框架的基石,因此开个文集首先写写Java基础,本来想直奔基础知识的介绍,但是为了保证知识的完整性,因此从Java安装和运行“hello world”开始(虽然百度...

nanaFighting
2018/06/15
0
0
【译】Java8官方教程(一):Java技术概述

原文地址:docs.oracle.com/javase/tuto… 课程:Java技术概述 关于Java技术的讨论似乎无处不在,但它究竟是什么呢?下面几节将解释Java技术是怎样同时作为编程语言和平台的,并且提供这项技术...

niithub
05/11
9
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot 403 问题

添加WebAppConfigurer 配置 @Configuration@EnableAutoConfigurationpublic class WebAppConfigurer extends WebMvcConfigurerAdapter { public WebAppConfigurer() { } ......

布袋和尚_爱吃鱼
18分钟前
3
0
Python自动更换壁纸爬虫与tkinter结合

直接上代码 import ctypesimport timeimport requestsimport osfrom threading import Threadfrom tkinter import Tk, Label, Button,Entry,StringVar,messagebox# '放到AppData\Roami......

物种起源-达尔文
19分钟前
2
0
Postgresql Study 笔记

Postgresql 安装 Windows, MAC Install Postgresql 下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Linux Install sudo apt-get update sudo apt-get in......

slagga
20分钟前
3
0
layer.open 打开新页面传参问题

如图所示,点击出售,把A页面的数据传到弹框上面,因为弹框比较复杂,所以使用引入一个新页面。 A.html a.js B.html b.js 1、第一种方案 sellInte: function (){ var obj = document.g...

木九天
23分钟前
3
0
沙龙报名 | 区块链数据服务技术应用实践

京东云是国内首家提供区块链数据在线分析服务产品的公司,也是行业内首家对区块链数据服务进行开源的公司。 本次沙龙是京东云BDS开源后,首次在深圳举办线下沙龙,我们将邀请京东云BDS团队核...

京东云技术新知
24分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部