Java 一步一步实现高逼格的字符串替换工具(一)

您所在的位置:网站首页 java中字符串替换指定位置的字符 Java 一步一步实现高逼格的字符串替换工具(一)

Java 一步一步实现高逼格的字符串替换工具(一)

2024-01-31 03:22| 来源: 网络整理| 查看: 265

Java 一步一步实现高逼格的字符串替换工具(一)

如果你有一段模板, 需要用某些数据替换其中的关键信息,怎么做 "hello, {user}, welcome to {place}!" 通过传不同的user, 和 place 来输出不同的文案

##1.一般做法

用String.replaceAll 来进行替换就好了, 无非是多调用几遍,代码写起来也简单,如下

@Test public void testReplace() { String text = "hello {user}, welcome to {place}!"; String user = "Lucy"; String place = "China"; String res = text.replace("{user}", user).replace("{place}", place); System.out.println(res); // 输出 hello Lucy, welcome to China! }

上面看着也没什么问题,实现起来也不难,实际呢 ? 如果我想要一个通用的替换方法, 如下面的接口定义, 约定text中用大括号包起来的由后面的参数进行替换

2. 通用的工具怎么玩

要求实现下面这个接口,text为需要被替换的字符串, 用后面的参数来替换text中用 {} 包含起来的内容

public String replace(String text, String ... args);

这时,该怎么用上面的方法来实现替换呢 ?

如果有了解过 MessageFormat 的同学,估计很快就能想到,这个工具就是jdk提供给我们来实现文本格式化的利器,那么简单的实现如下

public String replace(String text, Object ... args) { return MessageFormat.format(text, args); } @Test public void testReplace2() { String text = "hello {0}, welcome to {1}!"; String user = "Lucy"; String place = "China"; String ans = replace(text, user, place); System.out.println(ans); // 输出 hello Lucy, welcome to China! }

仔细瞅瞅,实现了我们的部分需求,但是还不完美,上面的实现要求{}中的是后面参数再参数列表中的下标,而我们希望直接在 {} 中填写参数名, 直接用后面的参数名来替换, 这个时候可以怎么处理 ?

3. 进阶

要实现也简单,我自己先用正则把你的参数捞出来,然后替换成下标数字就可以了,麻烦的无非是如何写正则, 如何获取参数名罢了,正则还好讲,参数名的话如果不想用反射,那么直接改造下 传参的方式即可,丢一个map进去就完美了

// 获取patter的过程较为负责,这里初始化时,做一次即可 private static Pattern pattern; static { pattern = Pattern.compile("((?


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3