StrSubstitutor和StrUtil占位符字符串替换

2023-11-11

一、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);
}

运行结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

StrSubstitutor和StrUtil占位符字符串替换 的相关文章

  • 抽象超类的默认接口方法

    可以说我有以下结构 abstract class A abstract boolean foo interface B default boolean foo return doBlah class C extends A implemen
  • 在 MongoDB Java 驱动程序中如何使用 $filter

    我有一个适用于 MQL 的查询 我需要将其翻译成Java MQL 中的查询如下所示 db
  • 使用 Spring MVC 返回 PDF 文件

    实际上 我有这个功能 我有一个框架 可以在其中设置 URL ip port birt preview report report rptdesign format pdf parameters 并且该框架呈现 PDF 文件 但我想隐藏该网址
  • Jodatime 日期格式

    是否可以格式化 JodaTime 日期 这是代码 private static LocalDate priorDay LocalDate date1 do date1 date1 plusDays 1 while date1 getDayO
  • 总结二维数组

    鉴于我当前的程序 我希望它在用户输入所有值后计算每列和每行的总和 我当前的代码似乎只是将数组的值加倍 这不是我想要做的 例如 如果用户输入具有以下值 1 2 3 2 3 4 3 4 5 的 3x3 矩阵 则看起来就像我在下面的程序中对其进行
  • 确定代码是否在 App Engine 运行时 (Java) 上运行

    如何确定某些代码 Serv let 或简单的类 是否正在 Google App Engine 运行时 Java 上运行 以便决定是否使用 App Engine 的特定库 是否有一些可靠的运行时环境 ID 您可以检查com google ap
  • Java 套接字:可以从一个线程发送并在另一个线程上接收吗?

    这可能是一个非常基本的问题 但我很难找到答案 让一个线程写入 Socket 的输出流 而另一个线程从 Socket 的输入流读取数据 这样可以吗 编辑 这是一个与外部服务器通信的客户端应用程序 我并不是想让两个线程互相交谈 很抱歉含糊不清
  • perl 和 java 正则表达式功能之间有什么区别?

    perl 和 java 在支持哪些正则表达式术语方面有什么区别 这个问题仅涉及正则表达式 并且特别排除了how可以使用正则表达式 即使用正则表达式的可用函数 方法 以及语言之间的语法差异 例如java要求转义反斜杠等 特别令人感兴趣的是 j
  • java.lang.IllegalArgumentException:addChild:子名称“/”不唯一

    java lang IllegalArgumentException addChild 子名称 不唯一 通过在 tomcat webapps 文件夹中启用和禁用 saml 单点登录来替换现有 war 文件时遇到此问题 我正在使用 apach
  • Java中无参数的for循环

    我在看别人的代码 发现了这段代码 for 我不是 Java 专家 这行代码在做什么 起初 我认为这会创建一个无限循环 但在该程序员使用的同一个类中 while true 其中 如果我错了 请纠正我 是一个无限循环 这两个相同吗 为什么有人会
  • 在 Java 中使用 Inflater 解压缩 gzip 数据

    我正在尝试使用以下方法解压缩 gzip 数据Inflater 根据文档 如果参数 nowrap 为 true 则 ZLIB 标头和校验和 字段将不会被使用 这提供了与 GZIP 和 PKZIP 使用的压缩格式 注意 使用 nowrap 选项
  • Akka 和 spring 配置

    我正在尝试将 akka 与 spring 结合起来 但没有成功 基本上 我的应用程序似乎不习惯读取 akka 模式 具有架构的 service context xml 的一部分
  • 处理照片上传的最佳方式是什么?

    我正在为一个家庭成员的婚礼制作一个网站 他们要求的一个功能是一个照片部分 所有客人都可以在婚礼结束后前往并上传他们的照片 我说这是一个很棒的想法 然后我就去实现它 那么只有一个问题 物流 上传速度很慢 现代相机拍摄的照片很大 2 5 兆 我
  • 我可以关闭并重新打开套接字吗?

    我学习了一个使用套接字的例子 在此示例中 客户端向服务器发送请求以打开套接字 然后服务器 侦听特定端口 打开套接字 一切都很好 套接字从双方 客户端和服务器 打开 但我仍然不清楚这个东西有多灵活 例如 客户端是否可以关闭一个打开的 从两端
  • 如何告诉 IntelliJ 使用 Java 1.6 JDK 启动 gradle?

    一个简单的问题 即使经过几个小时的尝试和搜索 我也无法弄清楚 我安装了 Java 6 和 7 如何告诉 IntelliJ 使用 JDK 版本 1 6 启动 Gradle 构建 无论我做什么 IntelliJ 都会以以下方式开始我的 grad
  • Checkstyle - 方法按修饰符排序

    是否可以添加到 checkstyle 规则以按修饰符对类中的方法进行排序 我的意思是开头的公共方法和最后的私有方法 MethodsOrderCheck做这个工作 检查文档 https www qulice com qulice checks
  • 如何使用 Nimbus LookAndFeel 更改 JToolTip 的背景颜色?

    在使用 Nimbus LookAndFeel 的基于 Swing 的 Java 应用程序中 我尝试设置工具提示的背景颜色 因此 我创建了 JToolTip 的子类 并通过重写 createToolTip 在我的组件中使用它 到目前为止一切正
  • Java 相当于 Python 的 urllib.urlencode(基于 HashMap 的 UrlEncode)

    From https stackoverflow com questions 2018026 should i use urllib or urllib2 2018103 2018103 Java 中 Python 的 urllib url
  • spring data jpa 过滤 @OneToMany 中的子项

    我有一个员工测试实体是父实体并且FunGroup信息子实体 这两个实体都是通过employeeId映射 我需要一种方法来过滤掉与搜索条件匹配的子实体 以便结果仅包含父实体和子实体 满足要求 员工测试类 Entity name Employe
  • 使用 Hibernate 防止无限循环数据检索

    我想知道 想象一个场景 例如 POJO public class User private String userName private String name private String surname private List

随机推荐

  • IDEA常用配置之代码自动格式化删除无用导入

    文章目录 IDEA常用配置之代码自动格式化删除无用导入 配置步骤 安装google java format 安装Save Actions 自动优化导包选项 检查行分隔符 缩进大小 IDEA常用配置之代码自动格式化删除无用导入 配置步骤 安装
  • Mac安装brew

    终极方法 不需要代理 百分百成功运行 bin zsh c curl fsSL https gitee com cunkai HomebrewCN raw master Homebrew sh 运行结果如下
  • AD 多边形 圆形 快速覆铜

    1 先确认你的板框 如下图 在Keep Out Layer 层 使用shift S键隐藏其他的层 2 全选板框 按T G M 输入法英文状态下 或手动选择 工具 多边形填充 多边形管理器 进入下图状态 选择图上标志的地方 选择板外形 如下图
  • 机器学习 day35(决策树)

    决策树 上图的数据集是一个特征值X采用分类值 即只取几个离散值 同时也是一个二元分类任务 即标签Y只有两个值 上图为之前数据集对应的决策树 最顶层的节点称为根节点 椭圆形节点称为决策节点 矩形节点称为叶子节点 决策树学习算法的工作是 在所有
  • Jetson Nano 40 pin 功能介绍

    40 根引脚主要分成GPIO General Purpose I O 通用功能与SFIO Special Function I O 特定功能 一 SFIO 18根 1 5V 直流电输入 输出 脚位 2 4 在排针脚塑料使用 红色 标识 2根
  • Java SE 16 record 类型说明与使用

    Java SE 16 record 类型说明与使用 作者 Grey 原文地址 博客园 Java SE 16 record 类型说明与使用 CSDN Java SE 16 record 类型说明与使用 说明 record 是 Java SE
  • Python3 爬取PAT个人乙级题所有答案代码

    Python3 爬取PAT个人乙级题所有答案 进入PAT乙级题题目页面 下面是链接 https pintia cn problem sets 994805260223102976 problems type 7 点开两个题目 观察两个链接有
  • 实验吧——认真一点!

    coding utf8 import requests import urllib 设置代理 用于调试过程中抓包分析 proxies http http localhost 9008 https http localhost 9008 he
  • 使用eclipse快速全局替换指定字符串

    1 按住 Ctrl H 调出全局搜索框 选择 File Search 文件搜索栏 2 输入需要搜索的字段和文件类型 点击下方的 Replace 按钮 如果搜索到对应的结果 则会弹出替换界面 此时输入需要替换的字段即可 具体操作如下图所示
  • Vue2 新手上路无处不在的特殊符号,让人傻傻分不清 “:”、“.”、“@”、“#” 、“{{}}“ 、“$“,‘$bus‘,‘$event‘

    背景 刚刚学vue没多久 经常分不清情况什么时候用什么符号 是指令 v bind 的缩写 是修饰符 是指令 v on 的缩写 它用于监听 DOM 事件 是v slot的缩写 插值语法 Vue 实例还暴露了一些有用的实例属性与方法 它们都有前
  • SG-Former:具有进化Token重新分配的自引导Transformer

    文章目录 摘要 1 简介 2 相关研究 3 方法 3 1 概述 3 2 自引导注意力 3 3 混合尺度注意力 3 4 Transformer块 3 5 Transformer架构变体 4 实验 4 1 ImageNet 1K的分类 4 2
  • TensorRT C++ 序列化serialize / 反序列化deserialize

    序列化Engine serialize the engine then close everything down const std string engine file tensorrt mnist trt nvinfer1 IHost
  • [数据结构复习]广义表

    1 形式 类似于 A B C D E F 2 广义表的存储 链表 每个节点的结构为 type 0表示附加头节点 1表示原子节点 2表示子表节点 data type 0时存放引用计数 1时存放data 2时存放指向子表表头的指针 link t
  • laravel middleware 中间件原码分析 之array_reduce getSlice

  • Linux下Git与GitHub的零基础快速入门(一)

    一 写在前面 Git 是一个开源的分布式版本控制系统 用于敏捷高效地处理任何或小或大的项目 GitHub是一个面向开源及私有软件项目的托管平台 因为只支持Git作为唯一的版本库格式进行托管 故名GitHub 基本功能作为开源代码库以及版本控
  • Win10 DNS解析失败解决方法

    概要 最近在使用win10系统的过程中 无法获取dns报错 上不了网 经过一番折腾 最终在用下面 的方法 解决了问题 第二步很关键 完成步一下步骤重启电脑应该就可以上网了 第一步 使用 ipconfig flushdns 命令刷新DNS解析
  • mysql的事务

    事务是什么 事务将数据库从一种一致性状态转换为另一种一致性状态 事务可由一条非常简单的SQL语句组成 也可以由一组复杂的SQL语句组成 在数据库提交事务时 可以确保要么所有修改都已经保存 要么所有修改都不保存 事务是访问并更新数据库各种数据
  • PaddleDetection中一些特色模型介绍

    CBNet 论文题目 CBNet A Novel Composite Backbone Network Architecture for Object Detection 论文地址 https arxiv org abs 1909 0362
  • GLES3.0中文API-glCompressedTexImage3D

    名称 glCompressedTexImage3D 以压缩格式指定三维纹理图像 C 规范 void glCompressedTexImage3D GLenum target GLint level GLenum internalformat
  • StrSubstitutor和StrUtil占位符字符串替换

    目录 一 commons lang包下的StrSubstitutor 1 使用场景一 2 使用场景二 二 hutoo包下的StrUtil 1 使用场景一 2 使用场景二 3 使用场景三 三 原生的三种方式 一 commons lang包下的