这里提供了几种方法供大家选择
1、org.springframework.expression
需要引入依赖
org.apache.commons
commons-text
1.8
代码:
String phoneNo = "13812341234";
String smsTemplate = "验证码:#{[code]},您正在登录管理后台,5分钟内输入有效。";
Map params = new HashMap<>();
params.put("code", 1234);;
ExpressionParser parser = new SpelExpressionParser();
TemplateParserContext parserContext = new TemplateParserContext();
String content = parser.parseExpression(smsTemplate,parserContext).getValue(params, String.class);
System.out.println(content);
ExpressionParser是简单的用java编写的表达式解析器,官方文档:
2、org.apache.commons.text
代码:
Map valuesMap = new HashMap();
valuesMap.put("code", 1234);
String templateString = "验证码:${[code]},您正在登录管理后台,5分钟内输入有效。";
StringSubstitutor sub = new StringSubstitutor(valuesMap);
String content= sub.replace(templateString);
System.out.println(content);
可以为变量设置默认值,格式为:${undefined.number:-1234567890},其中 undefined.number是变量名,
:-
是分隔符,1234567890是默认值。
代码:
Map valuesMap = new HashMap();
//valuesMap.put("code", 1234);
String templateString = "验证码:${code:-0000},您正在登录管理后台,5分钟内输入有效。";
StringSubstitutor sub = new StringSubstitutor(valuesMap);
String content= sub.replace(templateString);
System.out.println(content);
3、java.text.MessageFormat
代码:
Object[] params = new Object[]{"hello", "!"};
String msg = MessageFormat.format("{0} world {1}", params);
4、java.lang.String
代码:
String s = String.format("My name is %s. I am %d.", "Andy", 18);
常用的占位符含义:
转换符
详细说明
示例
%s
字符串类型
“喜欢请收藏”
%c
字符类型
‘m’
%b
布尔类型
true
%d
整数类型(十进制)
88
%x
整数类型(十六进制)
FF
%o
整数类型(八进制)
77
%f
浮点类型
8.888
%a
十六进制浮点类型
FF.35AE
%e
指数类型
9.38e+5
%g
通用浮点类型(f和e类型中较短的)
不举例(基本用不到)
%h
散列码
不举例(基本用不到)
%%
百分比类型
%(%特殊字符%%才能显示%)
%n
换行符
不举例(基本用不到)
%tx
日期与时间类型(x代表不同的日期与时间转换符)
不举例(基本用不到)