在Java中,文本块多行字符串文字。这意味着我们不需要陷入显式的行终止符,字符串连接以及分隔符的混乱局面,而这些分隔符通常用于编写普通的字符串文字。

Java 文本块在Java 13中可用( JEP 355 )和Java 14( JEP 368 )作为预览函数。它计划成为Java 15的标准函数( JEP 378 ) 。

要启用此预览函数,我们必须使用 -enable-preview -source 14 (两个连字符)标志。

文本块语法

  • 文本块包含多行文本,并使用三个双引号字符(""")作为其开始和结束定界符
  • 开头的三个双引号字符后总是一个行终止符。
  • 我们不能在一行上包含定界符和文本块。分隔符必须在自己的行上。内容只能从下一行开始。
  • 如果文本内容包含单引号或双引号,则无需将其转义。
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 
			);
					""";

尽管上面的文本块看起来非常简单,但仍然有很多事情发生在幕后。让我们来探索。

类似字符串

  • 从文本块生成的实例的类型为 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);

程序输出:

链接:https://www.learnfk.com/java/java14-java-text-blocks.html

来源:LearnFk无涯教程网

|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个空格。

添加一些缩进

假设我们想在上面的示例中为所有行在左侧添加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);					

程序输出:

链接:https://www.learnfk.com/java/java14-java-text-blocks.html

来源:LearnFk无涯教程网

|		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不参与平台检测,而是将文本块中的所有行终止符标准化为\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);

转义序列

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

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);					

程序输出:

链接:https://www.learnfk.com/java/java14-java-text-blocks.html

来源:LearnFk无涯教程网

|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 );

如果由于某种原因我们不希望删除缩进,可以使用'\s'(ASCII字符32,空格)转义序列。在任何行的末尾使用它可以保证该行将具有所有空格字符,直到遇到'\s'

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

System.out.println(dbSchema.replaceAll("\s", "."));

程序输出。 在此程序输出中,我将所有空格字符替换为点'.' 让您了解其效果。

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...
);.......................................

这一章你学到了什么?来做个笔记,好记忆不如烂笔头! 如果觉得对您有帮助,麻烦帮分享给您的朋友😊😊

祝学习愉快!(如果觉得不正确,选中要修改的内容->右键->编辑)

点我分享笔记