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