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
原文地址:http://blog.csdn.net/hfmbook/article/details/29596127