码迷,mamicode.com
首页 > 其他好文 > 详细

替换字符串中美元大括号的字符串

时间:2014-06-10 07:14:48      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:java   正则   

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 创建日期:2014年6月9日 17:23:29
 * 作者:黄飞
 * 联系方式:QQ:834865081
 * 邮箱:834865081@qq.com
 * */
public class RegUtil {
	/**
	 * @author 黄飞
	 * 作用查找字符串中所有的美元大括号的中间的字符
	 * @param value 字符串
	 * */
	public static List<String> findData(String value){
		/*匹配美元大括号的字符串*/
		String reg = "\\$\\{([^}]+)\\}"; 
		Pattern p = Pattern.compile(reg); 
		Matcher matcher = p.matcher( value ) ;  
		ArrayList<String>array = new ArrayList<String>();
		/*找出所有美元 大括号的字符串*/
		while(matcher.find()){
			String tempValue = matcher.group() ;
			/*取出大括号中间的字符*/
			tempValue = tempValue.substring( 2  , tempValue.length() -1) ;
			/*判断该字符是否已经查找到*/
			if(!array.contains(tempValue)){
				array.add( tempValue ) ; 
			}
		}
		return array;
	}
	
	/**
	 * @author 黄飞
	 * 替换所以的美元字符串
	 * @param value 字符串
	 *        map 替换的值
	 *        noExistsReplace 是否全部替换
	 * */
	public static String replace(String value,Map<String,String> map , boolean noExistsReplace){
		for(Map.Entry<String,String> entry : map.entrySet()){
			String key = "\\$\\{" + entry.getKey() + "\\}";
			value = value.replaceAll(key, entry.getValue()) ;
		}
		
		if(noExistsReplace){
			List<String> datas = findData( value ) ; 
			Map<String,String> tempValue = new LinkedHashMap<String, String>();
			for(String data : datas){
				tempValue.put(data , "" ) ; 
			}
			return replace(value , tempValue, false ) ;
		}
		
		return value;
	}
	
	public static void main(String[] args){
		String value = "${zs}很好,${li}" ;
		List<String> datas = findData(value) ; 
		Map<String,String> map = new LinkedHashMap<String, String>();
		int idx = 1 ;
		for(String data : datas){
			map.put(data, "值" + ( ++idx ) ) ; 
		}
		map.remove("li");
		System.out.println( replace(value, map , true ) ) ;
	}
}

替换字符串中美元大括号的字符串,布布扣,bubuko.com

替换字符串中美元大括号的字符串

标签:java   正则   

原文地址:http://blog.csdn.net/hfmbook/article/details/29596127

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!