Java 一步一步实现高逼格的字符串替换工具(二)
上一篇实现了一个用于字符串替换的方法,主要是利用 正则 + jdk的字符串替换,本篇则会再之前的基础上走一个扩展
1. 之前的方法存在的问题
先把上一篇的两个方法贴下,研究下有什么问题,然后再看下可以怎么去改进
// 获取patter的过程较为负责,这里初始化时,做一次即可
private static Pattern pattern;
static {
pattern = Pattern.compile("((?<=\\{)([a-zA-Z_]{1,})(?=\\}))");
}
/**
* 字符串替换, 将 {} 中的内容, 用给定的参数进行替换
*
* @param text
* @param params
* @return
*/
public static String format(String text, Map params) {
// 把文本中的所有需要替换的变量捞出来, 丢进keys
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String key = matcher.group();
// text = StringUtils.replace(text, "{" + key + "}", params.get(key) + "");
text = text.replaceAll("\\{" + key + "\\}", params.get(key) + "");
}
return text;
}
public static List batchFormat(String text, List> params) {
List keys = new ArrayList<>();
// 把文本中的所有需要替换的变量捞出来, 丢进keys
Matcher matcher = pattern.matcher(text);
int tempIndex = 0;
while (matcher.find()) {
String key = matcher.group();
if (keys.contains(key)) {
continue;
}
text = StringUtils.replace(text, key, tempIndex + "");
tempIndex++;
keys.add(key);
}
List resu