有一个业务需求要自己解析替换sql中的参数 网上找了半天倒是有一种方法是遍历参数的map然后replace之
但是那种方法在参数map数量巨大的时候效率非常之低下 于是我就想能不能用正则表达式来实现
然后就有了下面的代码
public static void main(String[] args) { String s = "生日:${birthday} 年龄:${age} 性别:${sex}"; Map<String, String> map = new HashMap<String, String>(); map.put("birthday", "19960531"); map.put("age", "22"); map.put("sex", "男"); System.out.println(replaceString(s, map)); } public static String replaceString(String s, Map<String, String> map) { Pattern mPattern = Pattern.compile("\\$\\{(.*?)}"); Matcher mMatcher = mPattern.matcher(s); while (mMatcher.find()) { String find = mMatcher.group(1); s = s.replace(mMatcher.group(0), map.get(find)); } return s; }
关键点:
1.正则表达式可以根据自己需求来替换
2.正则表达式中(.*?)中()代表分组 ?代表最短匹配 如果去掉?则按最长匹配就会报错
3.注意正则表达式中特殊字符比如 $ { 的转义
4.正则表达式真鸡儿麻烦