美文网首页java深度学习
java13新特征:文本块(Text Blocks)详解

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

作者: 安静的猫咪先生 | 来源:发表于2019-11-25 17:52 被阅读0次

摘要:本文介绍了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

相关文章

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/roujwctx.html