Java14 - Text块

Java14 - Text块 首页 / Java入门教程 / Java14 - Text块

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

程序输出:

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

程序输出:

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

程序输出:

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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

AI技术内参 -〔洪亮劼〕

SRE实战手册 -〔赵成〕

To B市场品牌实战课 -〔曹林〕

技术管理案例课 -〔许健〕

快手 · 移动端音视频开发实战 -〔展晓凯〕

技术领导力实战笔记 2022 -〔TGO 鲲鹏会〕

运维监控系统实战笔记 -〔秦晓辉〕

B端产品经理入门课 -〔董小圣〕

AI 应用实战课 -〔黄佳〕

好记忆不如烂笔头。留下您的足迹吧 :)