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

Posted 小花皮猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现JSON{参数}占位符名称替换指定的多个变量值相关的知识,希望对你有一定的参考价值。

前言

Java实现占位符名称替换值

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

问题1

如果有这样一个字符串

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

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

解决方案

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

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

完整代码如下

package com.wyh.utils;

import java.text.MessageFormat;

/**
 * @description: 测试占位符
 * @author: 魏一鹤
 * @createDate: 2022-08-08 21:45
 **/

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;

/**
 * @description: 替换参数占位符工具类
 * @author: 魏一鹤
 * @createDate: 2022-08-08 22:02
 **/

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

    /**
     * 格式化字符串 字符串中使用key表示占位符
     *
     * @param sourStr
     *            需要匹配的字符串
     * @param param
     *            参数集
     * @return
     */
    public static String format(String sourStr, Map<String, Object> 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;

/**
 * @description: 测试转义符
 * @author: 魏一鹤
 * @createDate: 2022-08-08 21:57
 **/

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


发现结果正是我们想要的


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

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

以上是关于Java实现JSON{参数}占位符名称替换指定的多个变量值的主要内容,如果未能解决你的问题,请参考以下文章

java中有啥方法可以读取占位符的字符串,并且把占位符替换成参数

替换 java 属性中占位符中的属性值 - IntelliJ 2017.2

Java实现${}进行匹配占位符并且替换数据工具类

用 pom.xml 中的值替换占位符名称

使用 shellscript 用 config.json 中定义的 1-n 个特定值替换 html 文件中的占位符 [关闭]

用动态数据替换占位符