Java占位符总结

2023-11-16

实现方式

java开发中,各种文本快速替换总结

方式一: jdk1.8–java.text.MessageFormat

    String text = MessageFormat.format("用户:{0}您好,短信验证码为:{1}", "张三", "10086");

方式二: Log4j–javaorg.slf4j.helpers.MessageFormatter

    /**
     * render placeholder string like log format, e.g. {@code Messages#format("Hello {}","World!")}
     *
     * @param messagePattern message pattern use {} as placeholder
     * @param params         placeholder value
     * @return formatted string
     */
    public static String format(String messagePattern, Object... params) {
        return params == null ? messagePattern : MessageFormatter.arrayFormat(messagePattern, params).getMessage();
    }

方式三: commons-text–org.apache.commons.text.StringSubstitutor

  • maven
     <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-text</artifactId>
         <version>1.9</version>
     </dependency>
  • 使用

    Map<String, Object> contextMap = new HashMap<>();
    contextMap.put("name", "张三);

    String template = "hello ${name}";
    StringSubstitutor stringSubstitutor = new StringSubstitutor(contextMap);
    String navigationJson = stringSubstitutor.replace(template);

方式四: hutool工具类实现

  • hutool的实现和用法和Log4j类似
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.6.3</version>
    </dependency>
  • 使用
CharSequenceUtil.format("用户:[{}] 注销session:[{}]", "张三", "10086");

代码示例

测试

package com.myron;

import org.apache.commons.text.StringSubstitutor;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.helpers.MessageFormatter;

import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;

/**
 * 不同占位符方案使用实例
 */
public class PlaceholderTest {
    private static final Logger LOGGER = LoggerFactory.getLogger(PlaceholderTest.class);
    public static void main(String[] args) {
 
        // 短信模板
        String template = "#userName#您好,欢迎使用#system#,您的验证码是:#code#,若非本人操作,请忽略!";
 
        // 占位符对应的值
        Map<String,String> valueMap = new HashMap<>();
        valueMap.put("userName","阿杰");
        valueMap.put("system","查询系统");
        valueMap.put("code","666666");
 
        StringSubstitutor sub = new StringSubstitutor();
 
        // 使用静态方法传入自定义的占位符前后缀
        String replace = sub.replace(template,valueMap,"#","#");
 
        System.out.println(replace); // 阿杰您好,欢迎使用查询系统,您的验证码是:666666,若非本人操作,请忽略!
 
    }


    @Test
    public void testMessageFormat() {
        LOGGER.info("MessageFormat.format {0}占位符------------开始");
        String text = MessageFormat.format("用户:{0}您好,短信验证码为:{1}", "张三", "10086");
        LOGGER.info(text);
        LOGGER.info("MessageFormat.format {0}占位符------------结束");
    }

    @Test
    public void testMessageFormatter() {
        LOGGER.info("MessageFormatter.arrayFormat {}占位符------------开始");
        String text = MessageFormatter.arrayFormat("用户:{}您好,短信验证码为::{}", new String[]{"张三", "10086"}).getMessage();
        LOGGER.info(text);
        LOGGER.info("MessageFormatter.arrayFormat {}占位符------------结束");
    }

    /**
     <dependency>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-text</artifactId>
     <version>1.9</version>
     </dependency>
     */
    @Test
    public void testStringSubstitutor() {
        LOGGER.info("StringSubstitutor.replace ${}占位符------------开始");

        Map<String, Object> contextMap = new HashMap<>();
        contextMap.put("name", "张三");
        contextMap.put("code", "10086");

        String template = "用户:${name}您好,短信验证码为:${code}";
        StringSubstitutor stringSubstitutor = new StringSubstitutor(contextMap);
        String text = stringSubstitutor.replace(template);
        LOGGER.info(text);
        LOGGER.info("StringSubstitutor.replace ${}占位符------------结束");
    }

    /**
     * render placeholder string like log format, e.g. {@code Messages#format("Hello {}","World!")}
     *
     * @param messagePattern message pattern use {} as placeholder
     * @param params         placeholder value
     * @return formatted string
     */
    public static String format(String messagePattern, Object... params) {
        return params == null ? messagePattern : MessageFormatter.arrayFormat(messagePattern, params).getMessage();
    }
}

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

Java占位符总结 的相关文章

随机推荐

  • gunicorn常用参数命令

    Gunicorn 是一个 Python 的 WSGI HTTP 服务器 具有实现简单 轻量级 高性能等特点 更多介绍内容参考官网 这里介绍几个常用参数 安装 pip3 install gunicorn 通过输入gunicorn v查看版本
  • “元宇宙”,究竟离我们有多远?(上)

    目录 引言 1 雀斑公主 U 世界的燃泪青春 元宇宙 的大门 1 1 元宇宙版 美女与野兽 1 2 U 世界中皮囊之下的温柔内心 2 腾讯研究院 Metaverse 互联网的未来是虚拟时空 2 1 从GTA到Metaverse的关键技术分析
  • 我的世界服务器物品箱子,我的世界:使用箱子储存物品居多,难不成他们很“鸡肋”?...

    原标题 我的世界 使用箱子储存物品居多 难不成他们很 鸡肋 箱子 是储存物品的利器 固然多数玩家使用其进行物品的储存 为何与箱子具有类似功能的物品却不受众 难道他们真的很 鸡肋 吗 为何箱子是最为受众的储存工具 箱子储存如此受众 是因为它能
  • Android应用层View绘制流程与源码分析

    转自https blog csdn net yanbober article details 46128379 1 背景 还记得前面 Android应用setContentView与LayoutInflater加载解析机制源码分析 这篇文章
  • MyBatis日常记录之sql片段的抽取

  • python在VScode中中文输出乱码的解决方案

    一 确定python编码 如果不是就点击这个位置会弹出 选择 通过编码重新打开 UTF 8 然后尝试运行 如果问题没有解决进行第二步 二 修改json文件 文件 首选项 设置 搜索 code runner executorMap 点击 在s
  • 16 【跨域】

    16 跨域 1 什么是跨域 跨域 是指浏览器不能执行其他网站的脚本 它是由浏览器的同源策略造成的 是浏览器对JavaScript实施的安全限制 浏览器从一个域名的网页去请求另一个域名的资源时 出现域名 端口 协议任一不同 都属于跨域 同源策
  • 芯片测试(3)——DC测试

    芯片测试 3 DC测试 一 电源电压测试 二 地引脚测试 三 I V测试 四 电阻测试 五 对应测试项 六 简述及测试方法描述 6 1 VIL VIH 加流测压 FIMV 6 2 VOL VOH 加流测压 FIMV 6 3 IIL IIH
  • pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

    换了新电脑 在新电脑中安装了pycharm 但是在使用pip install下载相关库时 出现pip 无法将 pip 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如果包括路径 请确保路径正确 然后再试一次 的
  • 给锂电池充电,充电器的输出电压

    目录 老旧充电器的一点小问题 指示灯不亮 拆 丢弃 给锂电池充电 指示灯无法显示充电状态 如何判断电池是否充满电了 电池反向充电 总结 老旧充电器的一点小问题 指示灯不亮 今天遇到一个有意思的问题 我买了两个12V的锂电池 DC接口 于是我
  • 2023年高校大数据实验室建设方案

    大数据实验室建设方案具体内容包括 人才培养方案建设 课程资源建设 师资建设 实验室建设 教学服务建设 泰迪打造国内领先的大数据人工智能及课程资源 包括 商务数据分析实训管理平台 云计算资源管理平台 大数据编程实训平台 商务数据分析编程实训平
  • Unity ScrollView拖不动

    今天再用Unity的imgui的ScrollView的时候 发现UI拖不动 找了好半天 终于招到了原因 在此记录下 代码如下 public Vector2 scrollPosition Vector2 zero void OnGUI scr
  • 移动端与服务端交互安全方案

    系统流程图 验签 解决问题 1 身份验证 是否是我规定的那个人 2 防篡改 是否被第三方劫持并篡改参数 3 防重放 是否重复请求 具体算法 1 约定appKey 保证该调用请求是平台授权过的调用方发出的 保证请求方唯一性 2 将appKey
  • 常用巡检命令

    思科设备 show version 查看系统软 硬件版本信息 show running config 查看设备运行的配置信息 show ip interfaces brief 查看所有接口摘要信息 show interfaces 查看全部接
  • Java中弹出对话框中的几种方式

    1 显示一个错误对话框 该对话框显示的 message 为 alert JOptionPane showMessageDialog null alert alert JOptionPane ERROR MESSAGE 2 显示一个内部信息对
  • JavaSE知识体系目录

    文章目录 Java基础语法知识 关键字 运算符 数据类型 流程控制语句 面向对象 异常和常用类 集合 Collection Map IO 字节流 字符流 线程 网络 Java基础语法知识 关键字 运算符 算数运算符 比较运算符 赋值运算符
  • CSS盒模型自适应布局——calc与box-sizing

    CSS盒模型 1 CSS中盒模型分为两种 第一种是W3C的标准模型 即盒子的宽高等于内容的宽高 盒子的padding和border不计算在内 第二种是IE的传统模型 IE6以下 不含IE6 称为怪异模式或者QuirksMode 即盒子的宽高
  • sklearn中的LASSO

    LASSO import numpy as np import matplotlib pyplot as plt np random seed 42 x np random uniform 3 0 3 0 size 100 X x resh
  • pytorch 笔记: Swin-Transformer 代码

    理论部分 论文笔记 Swin Transformer Hierarchical Vision Transformer using Shifted Windows UQI LIUWJ的博客 CSDN博客 源码部分 Swin Transform
  • Java占位符总结

    文章目录 实现方式 方式一 jdk1 8 java text MessageFormat 方式二 Log4j javaorg slf4j helpers MessageFormatter 方式三 commons text org apach