为了账号安全,请及时绑定邮箱和手机立即绑定

无涯教程: Java 14 – Text块介绍

标签:
Java

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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消