首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 多行字符串

Java 多行字符串

原创
作者头像
HoneyMoose
发布于 2022-08-08 13:48:34
发布于 2022-08-08 13:48:34
4.5K01
代码可运行
举报
文章被收录于专栏:CWIKIUSCWIKIUS
运行总次数:1
代码可运行

在本文中,我们来说说 Java 的多行字符串(multiline strings )。

从 JDK 15 开始,Java 提供了一个称为 Text Blocks 的语法,你可以在代码中直接使用这个功能,如果你安装这个版本的 JDK 的话,那么需要使用一些特定方法实现这个目标。

在本文中,我们还讨论使用其他方法的实现。

文本块

我们可以使用文本块来在代码中定义,文本块使用的是 3 个双引号 “”" (three double quote 3 个双引号)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String textBlocks() {
    return """
        Get busy living
        or
        get busy dying.
        --Stephen King""";
}

这种定义方式在当前 Java 中最方便的实现了,但是因为 JDK 版本的限制,很多项目可能根本没有办法使用这种定义方式。

如果你还没有使用 Java 15,但是使用了 Java 13 和 14 版本的话,我们可以启用预览功能来进行支持。 在后面的文章中,我们将探讨下肯能有的其他实现方式来实现文本块的功能。

获得行分隔符

每个操作系统使用自己的方式来确定是否开始一个新行。

在 Java 中,能够非常容易的获得针对运行的操作系统使用的是什么行分隔符,使用下面的代码就可以获得行分隔符了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String newLine = System.getProperty("line.separator");

如果你的 JDK 版本是在 7 以上的版本的话,你可以直接使用系统提供的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
System.out.println(System.lineSeparator());

方法。

我们将会使用 newLine 变量在后续的代码中插入一个新行。

String 字符串拼接

String concat 方法能够让我们非常容易的对字符串进行拼接,请考察下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String stringConcatenation() {
    return "Get busy living"
            .concat(newLine)
            .concat("or")
            .concat(newLine)
            .concat("get busy dying.")
            .concat(newLine)
            .concat("--Stephen King");
}

使用 + 操作符,是能够实现上面字符串拼接的另外一种方法。

Java 编译器将会把 concat() 和 + 操作符编译成相同的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String stringConcatenation() {
    return "Get busy living"
            + newLine
            + "or"
            + newLine
            + "get busy dying."
            + newLine
            + "--Stephen King";
}

字符串 String Join

Java 8 使用了一个叫做 String#join 新方法,这个方法将会使用一系列的字符串作为参数。

这个方法将会返回使用分隔符分隔的所有以字符串为参数的字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String stringJoin() {
    return String.join(newLine,
                       "Get busy living",
                       "or",
                       "get busy dying.",
                       "--Stephen King");
}

String Builder

StringBuilder 通常被用来帮助构建字符串,相同的还有一个 StringBuffer,这 2 者的区别主要在于是否是线程安全的问题。请参考:Java 的 StringBuffer 和 StringBuilder 的不同 文章中的内容。

最简单的解释就是 StringBuilder 是线程不安全的。

在基本 Java 实践中,如果我们需要在程序中构建字符串,通常都会使用 StringBuilder 或者 StringBuffer,而尽量避免使用 Java String 的 + 操作符:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String stringBuilder() {
    return new StringBuilder()
            .append("Get busy living")
            .append(newLine)
            .append("or")
            .append(newLine)
            .append("get busy dying.")
            .append(newLine)
            .append("--Stephen King")
            .toString();
}

String Writer

StringWriter 是另外一种可以用来创建多行字符串的方法。

在这个方法中,我们不需要使用 newLine ,因为我们使用了 PrintWriter 对象,这个对象将会自动添加一个方法 println(); (如果你查看下 JDK 的源代码的话就了解了。)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String stringWriter() {
    StringWriter stringWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(stringWriter);
    printWriter.println("Get busy living");
    printWriter.println("or");
    printWriter.println("get busy dying.");
    printWriter.println("--Stephen King");
    return stringWriter.toString();
}

Guava Joiner

使用外部库,通常对字符串拼接这个问题来说意义不大。

如果你的项目已经使用了外部库的话,你也是可以直接拿来用的。

例如,大部分项目中都会使用的 Guava。我们可以使用 Guava 中的 Joiner 类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String guavaJoiner() {
    return Joiner.on(newLine).join(ImmutableList.of("Get busy living",
        "or",
        "get busy dying.",
        "--Stephen King"));
}

从文件中载入

Java 读取文件和从文件中的输出是相同的。

换句话说,Java 从文件中读到什么就会显示什么,因为对于比较长的文本,可以使用属性文件或者文件的方式来把这些数据从程序中分离出来。

读取文件的方式有非常多种,我们通常会使用第三方的库来读取,因为 Java 读取文件的时候比较容易出现异常,同时读取文件有时候还需要处理文件读取的流。

例如下面的代码,我们使用的是原生的文件读取方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String loadFromFile() throws IOException {
    return new String(Files.readAllBytes(Paths.get("src/main/resources/stephenking.txt")));
}

使用 IDE 的特性

很多的 IDE 都能够支持长字符串的复制和粘贴。

尤其在粘贴的时候,IDE 通常都能够自动在你拷贝文本的后面添加回车换行符号,就是我们常说的 \r\n。

需要注意的是,这个是没有办法在运行时使用的。

这个功能就是简单的将一段长文本添加了回车换行,也让你不用每行后面都去自己添加回车换行符了。

结论

在本文中,我们对 Java 使用的多行字符串进行了探讨。

好消息是从 Java 15 开始,我们有了原生实现的方式来进行处理了。但,当前绝大部分环境还在使用 Java 8 或者 11,因此不少情况下还是需要使用替代的实现方式。

https://www.ossez.com/t/java/14049

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JDK 15 以上版本的字符串块
如果你使用的是 JDK 13 或者 14 的版本,你可以开启使用预览模式来让编译器通过。
HoneyMoose
2022/05/27
4520
JDK 15 以上版本的字符串块
Java-字符串
String是不可变的,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动
桑鱼
2020/03/18
5900
Java字符串之性能优化
在程序中你可能时常会需要将别的类型转化成String,有时候可能是一些基础类型的值。在拼接字符串的时候,如果你有两个或者多个基础类型的值需要放到前面,你需要显式的将第一个值转化成String(不然的话像System.out.println(1+’a')会输出98,而不是”1a”)。当然了,有一组String.valueOf方法可以完成这个(或者是基础类型对应的包装类的方法),不过如果有更好的方法能少敲点代码的话,谁还会愿意这么写呢?
哲洛不闹
2018/09/18
4650
Java IO学习笔记六
文章目录 1. 打印流 1.1. PrintStream 1.1.1. 构造函数 1.1.2. 常用的函数 1.1.3. 实例 1.2. PrintWriter 1.2.1. 构造函数 1.2.2. 常用函数 1.2.3. 实例 1.3. 参考文章 打印流 在整个IO包中,打印流是输出信息最方便的类,主要包含字节打印流(PrintStream)和字符打印流(PrintWrite)。打印流提供了非常方便的打印功能,可以打印任何的数据类型,例如:小数、整数、字符串等等,相对于前面学习的几个文件的操作来说
爱撒谎的男孩
2019/12/31
4740
教妹学 Java 第 37 讲:字符串拼接
“哥,你让我看的《Java 开发手册》上有这么一段内容:循环体内,拼接字符串最好使用 StringBuilder 的 append() 方法,而不是 + 号操作符。这是为什么呀?”三妹疑惑地问。
沉默王二
2021/07/16
3450
怒肝一夜,关于Java字符串的全部,都在这份手册里了
String 可以说是 Java 中最常见的数据类型,用来表示一串文本,它的使用频率非常高,为了小伙伴们着想,我怒肝了一周,把字符串能写的全都写了出来。
沉默王二
2020/06/24
1.1K0
Java基础——字符串
字符串连接可以使用加号(+)和concat(String str)方法,加号运算符的优势就是可以把任意类型数据拼接成字符串,而concat只能拼接String类型字符串
羊羽shine
2019/05/28
5090
Java进阶-IO(3)
话接上回,继续java IO的学习。上一次说完了字符流的读写数据,这次将基础部分剩余的一点内容看完。
reload
2024/03/03
2300
羞,Java 字符串拼接竟然有这么多姿势
我当时看到这条微信的第一感觉是:小菜你也太菜了吧,这都不知道为啥啊!我估计正在读这篇文章的你也会有同样的感觉。
沉默王二
2019/10/28
9280
Java String:重要到别人只能当老二的字符串类
字符串,是Java中最重要的类。这句肯定的推断不是Java之父詹姆斯·高斯林说的,而是沉默王二说的,因此你不必怀疑它的准确性。
沉默王二
2019/01/28
5500
Java String:重要到别人只能当老二的字符串类
GitHub 标星 1.3k+,一款超赞的用于字符串处理的 Java 8 库
很多初学编程的同学,经常给我吐槽,说:“二哥,你在敲代码的时候会不会有这样一种感觉,写着写着看不下去了,觉得自己写出来的代码就好像屎一样?”
沉默王二
2020/12/15
7940
Java 字符流
是字符流通向字节流的桥梁:使用指定的 charset 将要向其写入的字符编码为字节
Tim在路上
2020/08/04
9350
(58) 文本文件和字符流 / 计算机程序的思维逻辑
上节我们介绍了如何以字节流的方式处理文件,我们提到,对于文本文件,字节流没有编码的概念,不能按行处理,使用不太方便,更适合的是使用字符流,本节就来介绍字符流。 我们首先简要介绍下文本文件的基本概念、与二进制文件的区别、编码、以及字符流和字节流的区别,然后我们介绍Java中的主要字符流,它们有: Reader/Writer:字符流的基类,它们是抽象类。 InputStreamReader/OutputStreamWriter:适配器类,输入是InputStream,输出是OutputStream,将字节流转
swiftma
2018/01/31
2.3K0
(58) 文本文件和字符流 / 计算机程序的思维逻辑
Java字符类Character字符串类String和StringBuffer
我们知道Java内置了数据类型char,但面向对象的Java在实际处理过程中需要的是对象,于是包装类Character就被设计了出来。
dongfanger
2021/10/21
6420
还在用StringBuilder进行字符串拼接?那你就OUT了
大部分人会这么做,但是我们发现里面有太重复的"," 和"+"了。感觉拼接不是很灵活。
Lvshen
2022/05/05
3670
还在用StringBuilder进行字符串拼接?那你就OUT了
字符串拼接还在用StringBuilder?快试试Java8中的StringJoiner吧,真香!
之前,我们经常会通过StringBuffer或者StingBuilder对字符串进行拼接,但是你知道Java8中推出的StringJoiner吗?它比前者更加优美、灵活,如果你现在还使用StringBuffer拼接,强烈推荐你试试StringJoiner。
好好学java
2021/03/27
1.8K0
关于Java里面的字符串拼接,你了解多少?
字符串拼接是我们日常开发中很常见的操作,虽然常见,但要是使用不当的的话,很有可能让你的程序处理效率降低一大半,所以我们有必要来重新了解一下Java里面的字符串操作。
我是攻城师
2018/07/23
5810
关于Java里面的字符串拼接,你了解多少?
Java漫谈-String上
String对象是不可变的。每次修改都是创建了一个全新的String对象,以包含修改后的字符串内容,最初的String对象在原处丝毫未动。
WindCoder
2020/01/21
6540
java字符串分割方法
实现功能 编写一个将字符串分段的类,传入:需分段的字符串 与 字符个数(以此个数进行分段),输出:按指定字符个数进行分段后的若干字符串(汉字算单个字符)。
全栈程序员站长
2022/06/27
1.3K0
java字符串分割方法
java中的IO操作
使用FileReader读取 用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream上构造一个 InputStreamReader。 FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。
爱撒谎的男孩
2019/12/30
8240
相关推荐
JDK 15 以上版本的字符串块
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档