StrSubstitutor和StrUtil占位符字符串替换

文章介绍了ApacheCommonsLang包下的StrSubstitutor类和Hutool库中的StrUtil工具类在字符串替换中的使用场景,包括自定义替换符号、处理不存在的键以及通过Map传入参数等功能。同时,也提到了Java原生的三种字符串替换方式:String.format、MessageFormat.format和简单的replace方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、commons-lang包下的StrSubstitutor

StrSubstitutorcommons-lang包提供的一个字符串替换类,整体使用体验还是非常不错的。commons-lang包很多框架都有引用,很容易通过依赖传递到我们项目,所以有时候会出现我们根本没有引用这个包,但是却可以使用他包下的类。

1、使用场景一

public static void main(String[] args) {
    HashMap<String, String> objectObjectHashMap = new HashMap<>();
    objectObjectHashMap.put("name","张三");
    StrSubstitutor strSubstitutor = new StrSubstitutor(objectObjectHashMap);
    // hello在map当中不存在,所以直接原样输出了
    String replace = strSubstitutor.replace("${name}先生,${hello}");
    System.out.println(replace);
}

运行结果:

在这里插入图片描述

2、使用场景二

默认是通过${} 来做字符串替换的,我们可以修改符号。

StrSubstitutor strSubstitutor = new StrSubstitutor(objectObjectHashMap, "%(", ")");
public static void main(String[] args) {
    HashMap<String, String> objectObjectHashMap = new HashMap<>();
    objectObjectHashMap.put("name", "张三");
    StrSubstitutor strSubstitutor = new StrSubstitutor(objectObjectHashMap, "%(", ")");
    // hello在map当中不存在,所以直接原样输出了
    String replace = strSubstitutor.replace("%(name)先生,${hello:'我的 '}");
    System.out.println(replace);
}

运行结果

在这里插入图片描述

二、hutoo包下的StrUtil

再有就是我们也可以通过hutoo工具类当中的StrUtil来完成字符串的替换,hutoo可以说是近期非常火的工具类了,基本上项目都会引用他。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.20</version>
</dependency>

1、使用场景一

public static void main(String[] args) {
    String str = "你好,{},我的大宝贝,{}";
    String format = StrUtil.format(str, "张三", "哈哈");
    System.out.println(format);
}

运行结果

在这里插入图片描述

2、使用场景二

这个跟上面的StrSubstitutor相比又简单了些,而且都是通过map来映射参数。

public static void main(String[] args) {
   String str = "你好,{name},我的大宝贝,{aaa}";
    HashMap<String, String> objectObjectHashMap = new HashMap<>();
    objectObjectHashMap.put("name","张三");
    String format = StrUtil.format(str, objectObjectHashMap);
    System.out.println(format);
}

运行结果

在这里插入图片描述

3、使用场景三

假如key为null,会原样返回对应的变量

public static void main(String[] args) {
    String str = "你好,{name},我的大宝贝,{aaa}";
    HashMap<String, String> objectObjectHashMap = new HashMap<>();
    objectObjectHashMap.put("name", "张三");
    objectObjectHashMap.put("aaa", null);
    // 默认ignoreNull这个参数就是为true
    String format = StrUtil.format(str, objectObjectHashMap, true);
    System.out.println(format);
}

运行结果:

在这里插入图片描述

设置ignoreNull为false就是忽略null。

 public static void main(String[] args) {
     String str = "你好,{name},我的大宝贝,{aaa}";
     HashMap<String, String> objectObjectHashMap = new HashMap<>();
     objectObjectHashMap.put("name", "张三");
     objectObjectHashMap.put("aaa", null);
     String format = StrUtil.format(str, objectObjectHashMap, false);
     System.out.println(format);
 }

运行结果

在这里插入图片描述

三、原生的三种方式

以上两种都是基于了第三方jar,下面这几种方式都是不需要任何依赖的,都是Java自带的。

public static void main(String[] args) {
    // 方式一
    String format = String.format("你好,%s,我的大宝贝,%s", "张三", "李四");
    System.out.println(format);

    // 方式二
    String format1 = MessageFormat.format("你好,{0},我的大宝贝,{1}", "张三", "李四");
    System.out.println(format1);

    // 方式三
    String replace = "你好,{0},我的大宝贝,{1}".replace("{0}", "张三").replace("{1}", "李四");
    System.out.println(replace);
}

运行结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值