这里提供了几种方法供大家选择
1、org.springframework.expression
需要引入依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
代码:
String phoneNo = "13812341234";
String smsTemplate = "验证码:#{[code]},您正在登录管理后台,5分钟内输入有效。";
Map<String, Object> 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编写的表达式解析器,官方文档:
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html
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);
参考文档:https://commons.apache.org/proper/commons-text/javadocs/api-release/index.html
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代表不同的日期与时间转换符) | 不举例(基本用不到) |