栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现JSON{参数}占位符名称替换指定的多个变量值

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现JSON{参数}占位符名称替换指定的多个变量值

前言

Java实现占位符名称替换值

占位符现在应该说是比较流行的动态赋值,本文主要介绍了Java占位符名称替换值,根据一串带着参数名占位符的url,替换掉对应参数名的值

问题1

如果有这样一个字符串

 String info="我叫{0},我爱吃{1},我今年{2}岁";

你会怎么处理这个问题呢?

解决方案

这是一个比较简单的Java占位符操作

我们可以使用 MessageFormat.format去操作,用他去转换(替换占位符)

完整代码如下

package com.wyh.utils;

import java.text.MessageFormat;



public class Test {
    public static void main(String[] args){
        String info="我叫{0},我爱吃{1},我今年{2}岁";
        System.out.println(MessageFormat.format(info, "张三丰", "火锅", "18"));
    }
}

运行结果如下,没有问题,有的复杂点的可能需要用过’'去进行转义

问题2

上述说的是最简单的一种转义,如果业务复杂点呢,比如有的模板就喜欢用这种占位符

比如我们通常会使用这种方式,用变量来做占位符

 String info="我叫{name},我爱吃{food},我今年{age}岁";

这个时候再用上面的解决方式还行吗,测试下

很明显是不行的,直接就报错

Exception in thread “main” java.lang.IllegalArgumentException: can’t parse argument number: name


报错的原因很简单,无法解析参数占位符,这个时候怎么办呢?别急 继续看

解决方案

我们写一个专门的工具类,用来替换掉对应参数名的值

工具类代码如下

package com.hmdp.utils;

import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;



public class StringFormatUtil {
    private static final Pattern pattern = Pattern.compile("\{(.*?)\}");
    private static Matcher matcher;
    

    
    public static String format(String sourStr, Map param) {
        String tagerStr = sourStr;
        if (param == null)
            return tagerStr;
        try {
            matcher = pattern.matcher(tagerStr);
            while (matcher.find()) {
                String key = matcher.group();
                String keyclone = key.substring(1, key.length() - 1).trim();
                Object value = param.get(keyclone);
                if (value != null)
                    tagerStr = tagerStr.replace(key, value.toString());
            }
        }catch (Exception e){
            return null;
        }
        return tagerStr;
    }
}

然后再次测试,使用我们工具类里面的方法进行转化参数占位符

package com.hmdp.utils;

import java.util.HashMap;



public class Test2 {
   public static void main(String[] args){
       // 需要解析的字符串
       String info="我叫{name},我爱吃{food},我今年{age}岁";
       // 把全局的参数占位符放到map中进行解析
       HashMap map = new HashMap();
       map.put("name","张三");
       map.put("food","西红柿");
       map.put("age","100");
       System.out.println(StringFormatUtil.format(info, map));
   }
}

发现结果正是我们想要的


以上就是解决占位符的解决方式

欢迎大家评论留言,如果此文能够帮助到大家,那就是对我最大的鼓励!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039587.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号