java13新特征:文本块(Text Blocks)详解

摘要:本文介绍了java13新特征文本块(Text Blocks)以及使用细节。文章难度:初级

java13来了

2019年9月,java13正式发布。文本块(预览功能)是新特征之一。这个特征很好理解,笔者不废话了,直接上代码:

System.out.println("""
    Hello,
    multiline
    text blocks!
    """);

输出结果:

Hello,
multiline
text blocks!

这种多行字符串文字功能很实用,尤其是写json或sql的时候:

String json = """
    {
        greeting: "hello",
        audience: "text blocks",
        punctuation: "!"
    }
    """;

文本块就这么简单。使用时需要注意一下几点:

  • 语法
  • 缩进
  • 转义
  • 行结尾
  • 格式化
  • 预览功能

语法

  • """ 开始,从新的一行开始字符串的内容。这里的新起的这行不属于字符串,只表示内容开始,是语法的一部分。
  • """ 结束。 """ 可以紧跟字符串内容,也可以另起一行。另起一行时,字符串内容最后会留有一新行。
System.out.println("""
    Hello, multiline text blocks!""");
// 结果
// > Hello, multiline text blocks!

System.out.println("""
    Hello, multiline text blocks!
    """);
// 结果
// > Hello, multiline text blocks!
// >
  • 文本块创建的string与非文本块string完全一样
String s1 = """
    Hello, text blocks!""";
String s2 = "Hello, text blocks!";
System.out.println("equal: " + s1.equals(s2)); // true
System.out.println("identical: " + (s1 == s2)); // true

缩进

java编译器会自动删除不需要的缩进:

  • 每行结尾的空格都会删除
  • 每行开始的共有的空格会自动删除
  • 只保留相对缩进。
System.out.println("""
    Hello,
    multiline
    text blocks!
    """);
// 结果
// > Hello,
// > multiline
// > text blocks!
// >

System.out.println("""
    Hello,
      multiline
    text blocks!
    """);
// 结果
// > Hello,
// >   multiline
// > text blocks!
// >
  • 新行 """ 结束时,将 """ 向左调整,则可以给所有行前加相应数量的空格。将 """ 向右调整,没有作用。
System.out.println("""
        Hello,
        multiline
        text blocks!
    """);
// 结果
// >     Hello,
// >     multiline
// >     text blocks!
// >

转义

使用文本块不用对换行符 \n 和双引号 \" 进行转移,但其他的转义仍需要

System.out.println("""
    {
        greeting: "hello",
        audience: "text blocks",
        punctuation: "!"
    }
    """);
// 结果
// > {
// >     greeting: "hello",
// >     audience: "text blocks",
// >     punctuation: "!"
// > }
// > 

如果要转移""" 使用\"""

String s= """
    one: "
    two: ""
    three: \"""
    """;

行结尾

Windows和基于UNIX的操作系统具有不同的字符来表示行结尾。
Windows使用回车符 \r 和换行符 \n ,而基于Unix的系统仅使用换行符 \n
文本块中的所有行结尾将统一为换行符 \n

格式化

java13给String对象提供了一个新的格式化方法formatted:

// 以前的format方法
String.format(" Hello \n %s \n text blocks!", "multiline");

// 新的formatted方法
String s = """
    Hello
    %s
    text blocks!
    """.formatted("multiline");

预览功能

文本块目前还是java13的预览功能

预览语言或VM功能是Java SE平台的一项新功能,该功能已完全指定,完全实现且非常无常。它在JDK功能版本中提供,可根据实际使用情况激发开发人员的反馈; 这可能会导致它在未来的Java SE平台中成为永久性的。

在下一个JDK功能发布之前,将评估该功能的“真实世界”优势和劣势,以确定该功能是否在Java SE平台中具有长期作用,如果是,则是否需要优化。因此,该特征可以被授予最终和永久状态(有或没有改进),或者经历进一步的预览时段(有或没有改进),或者被移除。

所以,文本块特征在JDK13中提供,但默认情况下不启用。需要明确允许使用它们。maven开启预览功能的配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>13</release>
        <compilerArgs>--enable-preview</compilerArgs>
        </configuration>
</plugin>

总结:

  • 文本块提供了一种创建多行字符串的便捷方式。
  • 文本块创建的字符串与原来的字符串完全一样。
  • 创建文本块,只需用 """。开始必须新起一行;结尾可以新起一行。
  • 文本块自动删除行尾空格和行开始的共有空格,仅保留相对缩进。
  • 行结尾进行统一。
  • 增加了新格式化方法formatted
  • Java 13中的预览功能,需要明确启用。

(完)

非常感谢您的阅读!您的留言、打赏、点赞、关注、分享,是对笔者最大的鼓励:P

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,336评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 10,037评论 0 5
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 10,177评论 0 0
  • 更新时间:2016/5/13 介绍 本文档所提供的编码规范,适用于主要的Python发行版中组成标准库的Pytho...
    超net阅读 11,141评论 0 15
  • 日子总是漫不经心的,在每一天结束的时候告诉你又是一天的结束,可是它从来都不告诉你这一天它经历了什么,游历过世界...
    残阳影阅读 1,639评论 0 1

友情链接更多精彩内容