当前位置: 首页 > article >正文

java 正则匹配json中占位符

使用场景

对于一些框架研发的时候,一些json配置文件我们可以使用占位符语法,然后可通过-Dkey=value传递到系统参数中,最后正则替换掉

代码

		<dependency>
			<groupId>com.alibaba.fastjson2</groupId>
			<artifactId>fastjson2</artifactId>
			<version>2.0.23</version>
		</dependency>
		<dependency>
			<!--一些方便的工具类-->
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.3.2</version>
		</dependency>
package com.test;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    private static final String username = "张三";
    private static final String passwrod = "game123(*&";
    private static final Pattern VARIABLE_PATTERN = Pattern.compile("(\\$)\\{?(\\w+)\\}?");

    public static void main(String[] args) throws IOException {
        System.setProperty("username", username);
        System.setProperty("password", passwrod);
        String jsonString = IOUtils.toString(new FileInputStream("C:\\Users\\penggan\\Desktop\\novel\\Flink15\\src\\main\\resources\\core.json"), StandardCharsets.UTF_8);
        String formatString = replaceVariable(jsonString);
        System.out.println(formatString);

    }

    public static String replaceVariable(final String param) {
        // 获取系统属性值-Dkey=value以填充${key}
        Map<String, String> mapping = new HashMap<String, String>();

        Matcher matcher = VARIABLE_PATTERN.matcher(param);
        while (matcher.find()) {
            String variable = matcher.group(2);
            String value = System.getProperty(variable);
            if (StringUtils.isBlank(value)) {
                value = matcher.group();
            }
            mapping.put(matcher.group(), value);
        }

        String retString = param;
        for (final String key : mapping.keySet()) {
            retString = retString.replace(key, mapping.get(key));
        }
        return retString;
    }
}


http://www.kler.cn/a/382005.html

相关文章:

  • 利用pythonstudio写的PDF、图片批量水印生成器,可同时为不同读者生成多组水印
  • AnatoMask的分层图像编码器-解码器
  • Meta 上周宣布正式开源小型语言模型 MobileLLM 系列
  • Oracle视频基础1.4.5练习
  • 【dvwa靶场:XSS系列】XSS (DOM) 低-中-高级别,通关啦
  • c++基础12比较/逻辑运算符
  • 7.qsqlquerymodel 与 qtableview使用
  • HBuilderx修改主题色-改变编辑器背景颜色等
  • 【AI换装整合包及教程】OOTDiffusion: AI换装工具的革命性创新
  • 浅谈QT中Tab键的切换逻辑
  • C++工厂模式全解析:从简单工厂到抽象工厂的进阶之路
  • 【案例】旗帜飘动
  • 详解原型模式
  • 光伏设计软件如何快速上手?
  • IntelliJ Idea设置自定义快捷键
  • 跳蚤市场之商品发布功能
  • AI之硬件对比:据传英伟达Nvidia2025年将推出RTX 5090-32GB/RTX 5080-24GB、华为2025年推出910C/910D
  • 设计模式之——简单工厂模式
  • 树状数组(Binary Indexed Tree/Fenwick Tree)详解
  • ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源 或者超时失效
  • Java并发常见面试题总结(下)
  • 25.停车场管理系统(基于web的Java项目)
  • SpringBoot day 1105
  • springcloud各组件说明
  • ctfshow(89,90,92,93)--PHP特性--intval函数
  • 【RDD算子的分类】RDD的转换算子和触发算子(行为算子)、以及各个算子的作用,对比sql中的关键字