Java实现占位符名称替换值

目录
  • 前言
  • 代码
  • 原理

前言

占位符现在应该说是比较流行的动态赋值,方法有String.format(),通过%s或其他来赋值;或者MessageFormat.format(),通过{0}来赋值,参数名都不可定义

项目中有个需求,根据一串带着参数名占位符的url,替换掉对应参数名的值,由此有了以下的工具类。

代码

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;

    private StringFormatUtil(){}

    /**
     * 格式化字符串 字符串中使用{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;
    }

    //public static void main(String[] args) {
    //    String url = "https://xxx.com/cfes?c={campaign_name}&af_siteid={af_siteid}&clickid={clickid}&android_id={android_id}&advertising_id={advertising_id}&idfa={idfa}";
    //    Map<String, Object> map = new LinkedHashMap<>();
    //    map.put("campaign_name", "111");
    //    map.put("af_siteid", "222");
    //    map.put("clickid", "333");
    //    map.put("android_id", "444");
    //    map.put("advertising_id", "555");
    //    map.put("idfa", "");
    //    System.out.println(format(url, map));
    //}
}

结果
https://xxx.com/cfes?c=111&af_siteid=222&clickid=333&android_id=444&advertising_id=555&idfa=

原理

从上面结果可以看到,对应着参数名的占位符都被替换成了相应的值,原理也很简单,根据表达式匹配,找出str中的每个占位符,再根据传入的map,找到占位符名称做key,就能拿到对应的value,然后进行替换

到此这篇关于Java实现占位符名称替换值的文章就介绍到这了,更多相关Java 占位符替换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java字符串中${}或者{}等的占位符替换工具类

    正如标题所述,这是一个替换java字符串中${}或者{}等占位符的工具类,其处理性能比较令人满意.该类主要通过简单的改写myatis框架中的GenericTokenParser类得到.在日常开发过程中,可以将该类进行简单的改进或封装,就可以用在需要打印日志的场景中,现在张贴出来给有需要的人,使用方式参考main方法,不再赘述! public class Parser { /** * 将字符串text中由openToken和closeToken组成的占位符依次替换为args数组中的值 * @par

  • Java字符串格式化,{}占位符根据名字替换实例

    我就废话不多说了,大家还是直接看代码吧~ import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringFormatUtil { private static

  • Java实现占位符名称替换值

    目录 前言 代码 原理 前言 占位符现在应该说是比较流行的动态赋值,方法有String.format(),通过%s或其他来赋值:或者MessageFormat.format(),通过{0}来赋值,参数名都不可定义 项目中有个需求,根据一串带着参数名占位符的url,替换掉对应参数名的值,由此有了以下的工具类. 代码 import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public

  • JAVA字符串占位符使用方法实例

    目录 使用 replace 函数动态填充字符串 使用 String.format() 占位符替换 String.format 使用 1.占位符 2.对字符或字符串操作 3.对整数操作 4.对浮点数操作 5.对日期时间操作 补充:Java替换字符串中的占位符 总结 使用 replace 函数动态填充字符串 String str="Hello {0},我是 {1},今年{2}岁"; str = str.replace("{0}", "CSDN");

  • Mybatis打印替换占位符后的完整Sql教程

    利用mybtis插件打印完整的sql,将占位符?替换成实际值 import org.apache.ibatis.cache.CacheKey; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.Paramete

  • Mybatis日志参数快速替换占位符工具的详细步骤

    Mybatis log printf工具网页地址: http://www.feedme.ltd/log.html Mybatis执行的sql的打印格式为: 2020-08-04 09:16:44 -DEBUG - [io-8888-exec-5] .mapper.operation.OperationMapper.insert.        debug 145 : ==>  Preparing: INSERT INTO tulu.t_log_operation (id, module, mod

  • 使用springboot配置和占位符获取配置文件中的值

    目录 springboot配置和占位符获取配置文件值 @PropertySource&加载指定的配置文件 @ImportResource 导入指定的配置文件 springboot配置文件,占位符的使用 首先要给到注解 配置文件 运行最后一个测试类 测试如下 springboot配置和占位符获取配置文件值 @PropertySource& 加载指定的配置文件 package com.example.springbootdemo.pojo; import com.alibaba.fastjso

  • java泛型中占位符T和?有什么区别

    泛型中占位符T和?有什么区别?这是一个好问题,有的人可能弄不清楚,所以我们这里简单的演示一下,相信大家一定能弄清楚的! 先上两段代码: public static <T> void show1(List<T> list){ for (Object object : list) { System.out.println(object.toString()); } } public static void show2(List<?> list) { for (Object

  • spring是如何解析xml配置文件中的占位符

    前言 我们在配置Spring Xml配置文件的时候,可以在文件路径字符串中加入 ${} 占位符,Spring会自动帮我们解析占位符,这么神奇的操作Spring是怎么帮我们完成的呢?这篇文章我们就来一步步揭秘. 1.示例 ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(); applicationContext.setConfigLocation("${java.versi

  • Spring Boot环境属性占位符解析及类型转换详解

    前提 前面写过一篇关于Environment属性加载的源码分析和扩展,里面提到属性的占位符解析和类型转换是相对复杂的,这篇文章就是要分析和解读这两个复杂的问题.关于这两个问题,选用一个比较复杂的参数处理方法PropertySourcesPropertyResolver#getProperty,解析占位符的时候依赖到 PropertySourcesPropertyResolver#getPropertyAsRawString: protected String getPropertyAsRawSt

随机推荐