在Java 13中,他们想要添加“文本块”

计划在Java 13中发布文本块。这是在JEP 355中宣布的。

文本块是多行字符串文字,它消除了转义大多数特殊字符的需要,并自动进行换行。

这是从JEP 326开始的进一步研究尝试(未处理的字符串文字被召回)。



355个进球


  • 通过避免转义序列来简化编写Java代码的过程。
  • 提高代码的可读性。

JEP 355绝对不是要实现的目标


  • 这不是尝试定义新的引用类型,例如java.lang.String
  • 这不是尝试覆盖字符串运算符“ +”。
  • 文本块不支持行插值。 可以在后续的JEP中添加此功能。


动机


在Java中用于嵌入XML,HTML,JSON等。 通常需要使用字符串的屏蔽和串联来进行大量编辑。 片段通常难以阅读且难以维护。

因此,新的JEP既提高了可读性,又增加了编写多种Java程序的能力-使用由几条“行”组成的行,并且没有任何视觉混乱。 字符。 实际上,这是一个二维文本块,而不是一维字符序列。

语法和说明


线段左右分别用""""""框起来。 块的内容以"""之后的第一个字符开始,以"""之前的最后一个字符结束。 选择三引号可以清楚地看到它们是文本行,但是您可以将它们与常规字符串文字( "..." )区分开。

块可以直接包含引号( " ),而不包含斜杠( \ )。您也可以使用\" ,但是不建议这样做。

换行是自动完成的。 允许使用\ n,但不建议使用。

 """ line 1 line 2 line 3 """ 

类似地

 "line 1\nline 2\nline 3\n" 



 "line 1\n" + "line 2\n" + "line 3\n" 

这是一个空白文本块的示例:

 String empty = """ """; 

这是使用文本块的错误做法:

 String a = """"""; String b = """ """; String c = """ "; String d = """ abc \ def """; 

文本块中的转义序列


转义序列被解释。 这意味着开发人员可以在模块内编写转义序列,例如\n

例子


的HTML


 String html = """ <html> <body> <p>Hello, world</p> </body> </html> """; 

旧方法
 String html = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html>\n"; 


的SQL


 String query = """ SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = 'INDIANAPOLIS' ORDER BY `EMP_ID`, `LAST_NAME`; """; 

旧方法
 String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" + "WHERE `CITY` = 'INDIANAPOLIS'\n" + "ORDER BY `EMP_ID`, `LAST_NAME`;\n"; 


剧本


 ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); Object obj = engine.eval(""" function hello() { print('"Hello, world"'); } hello(); """); 

旧方法
 ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); Object obj = engine.eval("function hello() {\n" + " print('\"Hello, world\"');\n" + "}\n" + "\n" + "hello();\n"); 

Source: https://habr.com/ru/post/zh-CN454144/


All Articles