Java核心技术速学版(第3版)
上QQ阅读APP看书,第一时间看更新

1.5.7 文本块

使用文本块语法可以更加方便地提供跨行形式的字符串文本。文本块以"""开头,后面可以直接使用换行符,结尾则使用另一个"""来标记:

String greeting = """
Hello
World
""";

greeting字符串包含两个换行符:一个在Hello之后,另一个在World之后。字符串文本中不包含起始的"""标记后的换行符。

如果你不希望在最后一行使用换行符,那么可以将终止标记符"""放在最后一个字符之后:

String prompt = """
Hello, my name is Hal. \ 
Please enter your name:""";

在任何一行的末尾,你都可以在行末添加反斜杠作为禁止换行的标志:

String prompt = """
Hello, my name is Hal. \
Please enter your name:""";

这样,字符串内就不包含任何换行符了。

文本块特别适用于一些包含其他语言代码的情况,例如SQL或HTML。只须将其粘贴在一对三重引号之内:

String html = """
<div class="Warning">
    Beware of those who say "Hello" to the world 
</div>
""";

需要注意的是,使用文本块时,你可以不用转义引号。但是,文本块中还是有两种特殊情况需要转义引号:

文本块以引号结尾

文本块包含3个或更多引号。

遗憾的是,文本块中你仍然需要转义所有反斜杠。

常规字符串中的所有转义序列在文本块中的使用方式都相同。

可以通过删除末尾的空格,或者将Windows系统的换行符(\r\n)更改为更加简单的换行符(\n)的方式来规范文本的换行符。如果你仍旧需要保留末尾的空格,请将最后一个空格转换为\s转义符。以下字符串就以两个空格结尾:

String prompt = """
Hello, my name is Hal. 
Please enter your name: \s""";

对于前导空格来说,事情就更加复杂了。考虑一个典型的变量声明,需要从左边距进行缩进。可以缩进文本块:

String html = """
     <div class="Warning">
         Beware of those who say "Hello" to the world
     </div>
""";

这样就会去除文本块中所有行共有的最长前导空格序列。实际字符串是:

"<div class=\"Warning\">\n   Beware of those who say \"Hello\" to the world\n</div>\n"

注意,第一行和第三行中没有缩进。

文本块终止标记符"""之前的空格非常重要。但是,在删除缩进的过程中,整行的空格并不会被压缩。

警告:作为前缀的空格必须与文本块中的所有行完全匹配。如果混合使用制表符和空格,你可能会发现删减的空格会比预期的少。