大家好呀,java21也出来好一阵子了,大家对java21的特性了解多少呢,今天就给大家揭开java21神秘的面纱。
常用的有以下几点:
- 单行模版表达式
- 多行模版表达式
- STR模版处理器的用法
- RAW的使用
- FMT的使用
- 自定义模版
话不多说,开始代码:
单行模版表达式
单行模版表达式是最简单的模版使用了,直接看代码:
/***
* @Description:简单模板使用
* @return: java.lang.String
* @Author: zyt
* @Date 2023-12-02 11:17
*/
public static String simpleStr () {
String name = "demo之家";
return STR."my name is \{name}" ;
}
注意上述代码通过STR这个模版处理器将我的姓名打印出来,{name}称之为内嵌表达式,以下是运行的结果:
多行模版表达式
/***
* @Description:多行模版
* @return: java.lang.String
* @Author: zyt
* @Date 2023-12-02 21:01
*/
public static String multiLineStr () {
return STR."""
<html>
<body>
这是测试
</body>
</html>
""";
}
结果如下:
这样子的字符串看起来是不是舒服多了,这要是以前,一顿字符串拼接,老难受了,不仅html可以,还可以是json这样的数据格式哦。
public static String jsonStr(String id,String name) {
return STR."""
"id":"\{id}",
"name":"\{name}"
""";
}
STR模版处理器的用法
数学计算
/***
* @Description:进行数学计算
* @return: java.lang.String
* @Author: zyt
* @Date 2023-12-02 21:44
*/
public static String mathStr() {
var a = 10;
var b = 20;
return STR."\{a}+\{b}=\{a+b}";
}
调用方法
/***
* @Description:字符串模板中调用方法
* @return: java.lang.String
* @Author: zyt
* @Date 2023-12-02 21:51
*/
public static String useMethodStr() {
return STR."my name is \{test()}";
}
private static String test(){
return "demo之家";
}
RAW的使用
RAW和STR的区别主要就是RAW返回的是StringTemplate,而STR直接返回的是String类型。
public static String rowStr() {
var name = "demo之家";
StringTemplate st = RAW."my name is \{name}.";
return STR.process(st);
}
FMT的使用
FMT与STR的区别是FMT提供了格式化处理,同样提供了插值功能。
public static String FMTstr(int x,int y) {
return FMT. "%5d\{ x } + %50d\{ y } = %5d\{ x + y }" ;
}
上述代码中,我将y的间距放大了些,小伙伴们可以更清楚的看到效果。
自定义模版
除了我们官方提供的这些模版处理器,我们一定会有自己的需求,那么我们可不可以自定义模版处理器呢,当然可以,下面看代码:
/***
* @Description:这里使用了自定义模版
* @return: java.lang.String
* @Author: zyt
* @Date 2023-12-03 16:13
*/
public static String strTemplateCustomize() {
var INTER = StringTemplate.Processor.of((StringTemplate st) -> {
System.out.println("使用自定义模版");
StringBuilder sb = new StringBuilder();
Iterator<String> fragIter = st.fragments().iterator();
for (Object value : st.values()) {
sb.append(fragIter.next());
sb.append(value);
}
sb.append(fragIter.next());
return sb.toString();
});
int x = 10, y = 20;
return INTER."\{x} 加 \{y} 等于 \{x + y}" ;
}