1 前言
模板字符串中经常使用${变量名}来进行字符串的变量替换,可使用commons-text库中的工具方式实现该功能。
依赖配置如下:
org.springframework.boot spring-boot-starter-parent 2.5.4 org.springframework.boot spring-boot-starter-web org.apache.commons commons-text 1.9 org.apache.commons commons-collections4 4.4 org.projectlombok lombok 1.18.22
2 使用
package com.xiaoxu.tool.demo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.text.StringSubstitutor;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
public class TestReplace {
private static final String prefix = "${";
private static final String suffix = "}";
public static String replaceVar(Map vars,String template){
if(!StringUtils.hasLength(template)){
log.info(String.format("调用%s方法失败,模板字符串替换失败,模板字符串不能为空",
Thread.currentThread().getStackTrace()[1].getMethodName()));
return null;
}
if(MapUtils.isEmpty(vars)){
log.info(String.format("调用%s方法失败,模板字符串替换失败,map不能为空",
Thread.currentThread().getStackTrace()[1].getMethodName()));
return null;
}
List tempStrs = vars.keySet().stream().map(s -> prefix + s + suffix).
collect(Collectors.toList());
tempStrs.forEach(t->{
if(!template.contains(t)){
throw new RuntimeException(String.format("调用%s方法失败,模板字符串替换失败,map的key必须存在于模板字符串中",
Thread.currentThread().getStackTrace()[1].getMethodName()));
}
});
StringSubstitutor stringSubstitutor = new StringSubstitutor(vars);
return stringSubstitutor.replace(template);
}
public static void main(String[] args) {
Map vals = new HashMap<>();
vals.put("name","xiaoxu");
vals.put("age","36");
String temp = "我叫${name},今年${age}岁.";
System.out.println(replaceVar(vals, temp));
}
}
执行结果:
我叫xiaoxu,今年36岁.



