博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串模板匹配
阅读量:6187 次
发布时间:2019-06-21

本文共 1875 字,大约阅读时间需要 6 分钟。

  hot3.png

 

package com.adam;import java.util.HashMap;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;public class StringTemplateParser {	private String pstartTag = "${";	private String pendTag = "}";	/**	 * 	 * @param template 要解析的字符串	 * @param map 对应的值	 *   返回解析结果	 */	public String parse(String template,Map
map){ StringBuffer temp = new StringBuffer(template); Map
tagMap = this.getTagIndex(template); for(Map.Entry
entry:tagMap.entrySet()){ //获得标识符 String tag = entry.getValue(); //获得替换的值,如果没有,则不变 String repVal = map.get(entry.getKey())==null?entry.getValue():map.get(entry.getKey()); //获得标识符在字符串中出现的次数 int index = 0; //判断同一个标识符在字符串中出现的次数 while((index=template.indexOf(tag,index))!=-1){ //替换 //System.out.println(tag+"位置:"+index); temp = temp.replace(temp.indexOf(tag), temp.indexOf(tag)+tag.length(), repVal); index += tag.length(); } } return temp.toString(); } /** * 获得key和对应的标识符如{age=${age}, name=${name}} * @param template * */ protected Map
getTagIndex(String template){ Map
map = new HashMap
(); Pattern pattern = Pattern.compile("\\$\\{[\\w]+\\}") ; Matcher matcher = pattern.matcher(template); int pstartLen = pstartTag.length(); while(matcher.find()){ //获得标示符 String tag = matcher.group(); //获得key String key = tag.substring(pstartLen, tag.lastIndexOf(pendTag)); map.put(key, tag); } return map; } public static void main(String[] args) { String template = "${age} hi,${name},${name} are you ${age}?"; Map
map = new HashMap
(); map.put("name", "adam"); map.put("age", "25"); StringTemplateParser stp = new StringTemplateParser(); System.out.println(stp.parse(template,map)); System.out.println(stp.getTagIndex(template)); }}

转载于:https://my.oschina.net/mkm/blog/78430

你可能感兴趣的文章
Xcode8 1 创建coreData的ManagedObject后,报错
查看>>
【Android Fragment】友盟统计 Fragment 页面显示隐藏的完美解决方案
查看>>
深入了解Vue响应式系统
查看>>
标准化组织能否解决BCH社区分歧
查看>>
Laravel 的 Homestead 开发环境部署
查看>>
关于定位那些事儿
查看>>
Jenkins +nginx 搭建前端构建环境
查看>>
JS中的深浅拷贝以及实现深拷贝的几种方法.
查看>>
Canvas基本知识点一:直线图形
查看>>
08、组策略管理
查看>>
决策树---CART算法
查看>>
HG255D刷潘多拉共享惠普1020打印机的问题汇总
查看>>
http的应用-编译安装Apache
查看>>
XP上无法应用Win2008的AD组策略解决办法
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
***链路中mtu导致的问题
查看>>
nginx基本配置与参数说明
查看>>
BGP加密穿越ASA分析
查看>>