替换字符串中符合正则表达式的key对应的map中的value

有一个业务需求要自己解析替换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.正则表达式真鸡儿麻烦

posted @ 2018-05-04 16:54  一只韭菜  阅读(2600)  评论(0编辑  收藏  举报