java13新特性—文本块(预览)
Java 13 提供了文本块(Text Blocks) 预览特性。该特性会方便开发者编写多行字符串。该特性的具体介绍见 JEP 355。
注意,是预览特性,默认不支持。
了解 Python 的同学会对这个特性比较熟悉,不过 Java 的这个特性与 Python 不完全相同。比如”””你好”””这种不换行的写法是不支持的
public class TestMultiLineStr {
public static void main(String[] args) { String data = """ 你好 世界 """; System.out.printf(data); } }
|
编译、执行时候,需要加上–enable-preview参数,多行的相同空白前缀会被去掉
$ javac --release 13 --enable-preview TestMultiLineStr.java $ java13 --enable-preview TestMultiLineStr 你好 世界
|
public class TestMultiLineStr {
public static void main(String[] args) { String data = """ 你好 世界 """; System.out.printf(data); } }
|
public class TestMultiLineStr {
public static void main(String[] args) { String data = """ 你好 世界"""; System.out.printf(data); } }
|
public class TestMultiLineStr {
public static void main(String[] args) { String data = """ 你好" " 世界'' """; System.out.printf(data); } }
|
String data = """你好""";
String data = """你好 世界 """;
|
stripIndent() - 从字符串的开头和结尾删除附带的空格。
translateEscapes() - 根据字符串语法翻译转义序列。
formatted() - 类似于 String format() 方法以支持文本块字符串中的格式化。
java14新特性-增强文本块(第二次预览)
Text Blocks是在JDK13中以第一次预览版本引入的。现在在JDK14中是第二次预览版本 JEP 368: Text Blocks。
Indentation编排
String html = """ ..............<html> .............. <body> .............. <p>Hello, world</p> .............. </body> ..............</html> ..............""";
|
- Indentation的规则就是以最下面的
"""为界,对每一行都移除相同数量的空格
<html> <body> <p>Hello, world</p> </body> </html>
|
上面的例子,最下面的”“”刚好在最左边的位置,如果把“”“向右移动4个空格,我们看到输出结果是不变的,这样我们又得到一条结论:
如果”“”向右移动,则以text block中最左的那一行记录为准。
如果我们把“”“向左移动四位,就会发现最终的输出结果每行前面都有四个空格。
这个功能是和String添加的新的String::stripIndent()对应的。
Escaping转义
@Test public void useEscape(){ String code = """ " "" \s\s\s\s\s保留这行前面的空白 String text = \""" 这里展示的是escape的用法! \"""; 跟大家说个密码,这一行很长,我准备分行\ 来写,哈哈! """; log.info("{}",code); }
|
输出结果:
” "" 保留这行前面的空白 String text = """ 这里展示的是escape的用法! """; 跟大家说个密码,这一行很长,我准备分行来写,哈哈!
|
首先可以看到一个双引号和两个双引号都是不用转义的,直接写就行了。三个双引号就需要转义了。
另外\s表示的是一个空格。在需要的时候可以使用。
在一行结尾直接插入\,表示这一行太长了,还没结束。
- 注意在Text Block中,不管是windows的回车,换行符还是linux的换行符都会转义成为换行符。这个转义功能也对应了String的新方法
translateEscapes()
@Test public void useMethod(){ String query1 = """ SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = '%s' ORDER BY `EMP_ID`, `LAST_NAME`; """;
log.info(query1.formatted("我是一个参数")); }
|
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = '我是一个参数' ORDER BY `EMP_ID`, `LAST_NAME`;
|
java15新特性—文本块(正式)