字符串格式化(不造轮子)

jdk提供的字符串格式化工具类String.format、MessageFormat使用的占位符不够直观,除了使用重量级的模板引擎外,寻求一种轻量级的方式

Apache StringSubstitutor

commons-text包下的org.apache.commons.text.StringSubstitutor

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.10.0</version>
</dependency>
  • 替换字符串中的${name}等占位符,并可自定义占位符前缀和后缀
    示例
    在这里插入图片描述
  • 在占位符中使用分隔符:-指定默认值
    在这里插入图片描述
  • 可使用StringSubstitutor#setValueDelimiter(java.lang.String)StringSubstitutor#setValueDelimiter(char)等方法指定默认值的分隔符
  • 可自定义数据来源,实现StringLookup接口即可。
    上述示例使用的数据来源是Map,真实场景中会有多种数据载体,如JOSN,POJO等,可实现org.apache.commons.text.lookup.StringLookup接口来自定义取值逻辑
    在这里插入图片描述

Spring框架中的PropertyPlaceholderHelper

spring框架中的占位符工具类org.springframework.util.PropertyPlaceholderHelper
它提供了一种简单的方式来解析和替换字符串中的属性占位符。而且这个类是线程安全的,创建实例,定义好前缀后缀之后,全局使用这一个实例即可

  • 构造方法定义占位符前缀和后缀
    在这里插入图片描述

  • 重载的构造方法,定义默认值的分隔符,可以在占位符中指定默认值
    在这里插入图片描述

  • 执行替换的方法,将Properties中的属性值替换到字符串模板中
    在这里插入图片描述
    示例

    public static void main(String[] args) {
        var properties = new Properties();
        properties.setProperty("name", "内存瞬时使用率");
        properties.setProperty("value", "90%");
    
        var strTemplate = "机器@(name)已经达到@(value)";
    
        var placeholderHelper = new PropertyPlaceholderHelper("@(", ")");
        var strReplace = placeholderHelper.replacePlaceholders(strTemplate, properties);
    
        System.out.println(strReplace);    // 输出 机器内存瞬时使用率已经达到90%
    }
    
  • 使用默认值,占位符中分隔符后面指定了默认值,字符串占位符如果找不到对应的值 ,则使用默认值
    示例
    在这里插入图片描述

  • 重载方法,可自定义数据源来源,如从map或pojo对象中获取值
    在这里插入图片描述
    示例

    public static void main(String[] args) {
        var strTemplate = "机器@(name)已经达到@(value)";
        var placeholderHelper = new PropertyPlaceholderHelper("@(", ")");
        var valueMap = Map.of("name", "cpu瞬时使用率", "value", "70%");
        var strReplace2 = placeholderHelper.replacePlaceholders(strTemplate, valueMap::get);
        System.out.println(strReplace2);    // 输出 机器cpu瞬时使用率已经达到70%
    }
    
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值