替换字符串中符合正则表达式的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.正则表达式真鸡儿麻烦

转载于:https://www.cnblogs.com/bigVGod/p/8991468.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值