行终止符

不同的平台有不同的行终止符。
Java 不会进入平台检测并将文本块中的所有行终止符规范化为 \n

如果需要平台行终止符,则可以使用`String::replaceAll("\n", System.lineSeparator())"。

String string = "Hello";
String textBlock = """
					World""";
String joinedString =  string + textBlock;
joinedString = joinedString.replaceAll("\n", System.lineSeparator());
System.out.println(joinedString);
之路教程 https://onitr oad .com

Java文本块缩进

文本块保留其内容的缩进。
为了实现这一点,JEP 将空间划分为偶然和必要的缩进。

为了在上下文中讨论,让我们参考第一个例子。

String dbSchema = 	"""
			CREATE TABLE 'TEST'.'EMPLOYEE'
			(
			  'ID' INT NOT NULL DEFAULT 0 ,
			  'FIRST_NAME' VARCHAR(100) NOT NULL ,
			  'LAST_NAME' VARCHAR(100) NULL ,
			  'STAT_CD' TINYINT NOT NULL DEFAULT 0 
			);
					""";
System.out.println(dbSchema);

程序输出:

|CREATE TABLE 'TEST'.'EMPLOYEE'
|(
|  'ID' INT NOT NULL DEFAULT 0 ,
|  'FIRST_NAME' VARCHAR(100) NOT NULL ,
|  'LAST_NAME' VARCHAR(100) NULL ,
|  'STAT_CD' TINYINT NOT NULL DEFAULT 0
|);

在这里,我们有两种类型的缩进:

第一个缩进是从行首到所有行中的单词“CREATE”。
这可以根据各种因素增加或者减少,例如格式化插件或者开发人员的选择。
它是偶然的缩进。

第二个缩进是从字符'('开始到'ID'
大部分时间是4或者8个空格。
为了保持文本块的缩进意图,这应该很荣幸。
这被称为基本缩进.

Java 文本块删除所有附带的缩进,只保留必要的缩进。

添加一些所需的缩进

让我们想象一下,我们想要为上面示例中的所有行左缩进 2 个制表符。
我们可以通过仔细定位关闭的三重引号以向左移动 2 个标签来做到这一点。
放置在与基本缩进应该拾取的完全相同的位置。

String dbSchema = 	"""
			CREATE TABLE 'TEST'.'EMPLOYEE'
			(
			  	'ID' INT NOT NULL DEFAULT 0 ,
			  	'FIRST_NAME' VARCHAR(100) NOT NULL ,
			  	'LAST_NAME' VARCHAR(100) NULL ,
			  	'STAT_CD' TINYINT NOT NULL DEFAULT 0 
			);
	""";
System.out.println(dbSchema);

程序输出:

|		CREATE TABLE 'TEST'.'EMPLOYEE'
|		(
|  			'ID' INT NOT NULL DEFAULT 0 ,
|  			'FIRST_NAME' VARCHAR(100) NOT NULL ,
|  			'LAST_NAME' VARCHAR(100) NULL ,
|  			'STAT_CD' TINYINT NOT NULL DEFAULT 0
|		);

另请注意,文本块中每一行的尾随空格也会被 Java 编译器去除。

处理tab符号

不幸的是,编译器不难知道TAB 字符在不同的编辑器中是如何显示的。

因此,编译器将单个空格字符视为单个 TAB 字符,即使 TAB 字符可能导致最多相当于八个空格的空白。

文本块类似于String

  • 从文本块生成的实例是java.lang.String类型,具有与传统双引号字符串相同的特征。这包括对象表示和插入字符串池。
  • 我们可以使用文本块作为 String类型的方法参数传递。
  • 文本块可以在任何可以使用字符串文字的地方使用。例如,我们可以将它用于字符串连接。
String string = "Hello";
String textBlock = """
					World""";
String joinedString =  string + textBlock;
System.out.println(joinedString);

输出:

Hello
World

新的转义序列

转义行终止符

很多时候,我们只想将内容写入程序中的多行,但它们实际上是单个字符串内容。
在这种情况下,我们可以使用单反斜杠 '\'的行终止符转义字符。
它禁止包含隐式换行符。

String dbSchema = """
	CREATE TABLE 'TEST'.'EMPLOYEE'\
	(\
	'ID' INT NOT NULL DEFAULT 0 ,\
	'FIRST_NAME' VARCHAR(100) NOT NULL ,
	'LAST_NAME' VARCHAR(100) NULL ,\
	'STAT_CD' TINYINT NOT NULL DEFAULT 0 \
	);
	""";
System.out.println(dbSchema);

程序输出:

|CREATE TABLE 'TEST'.'EMPLOYEE'('ID' INT NOT NULL DEFAULT 0 ,'FIRST_NAME' VARCHAR(100) NOT NULL ,
'LAST_NAME' VARCHAR(100) NULL ,'STAT_CD' TINYINT NOT NULL DEFAULT 0 );
Java 文本块

在 Java 中,文本块是多行字符串文字。
这意味着我们不需要陷入混乱的显式行终止符、字符串连接和分隔符,否则用于编写普通字符串文字。

文本块语法

  • 文本块由多行文本组成,并使用三个双引号字符 (""") 作为其开始和结束分隔符。
  • 开头的三个双引号字符后面总是跟一个行终止符。
  • 我们不能在一行中包含分隔符和文本块。开始定界符必须在它自己的行上。内容只能从下一行开始。
  • 如果文本内容包含单引号或者双引号,则无需对其进行转义。
String dbSchema = 	"""
			CREATE TABLE 'TEST'.'EMPLOYEE'
			(
			  'ID' INT NOT NULL DEFAULT 0 ,
			  'FIRST_NAME' VARCHAR(100) NOT NULL ,
			  'LAST_NAME' VARCHAR(100) NULL ,
			  'STAT_CD' TINYINT NOT NULL DEFAULT 0 
			);
					""";

虽然上面的文本块看起来很简单,但在引擎下仍然发生了很多事情。

日期:2020-09-17 00:09:39 来源:oir作者:oir