百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Java 多行字符串(java多行输出)

lipiwang 2025-03-18 23:52 6 浏览 0 评论

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

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

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

文本块

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

public String textBlocks() {
    return """
        Get busy living
        or
        get busy dying.
        --Stephen King""";
}

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

如果你还没有使用 Java 15,但是使用了 Java 13 和 14 版本的话,我们可以启用预览功能来进行支持。

在后面的文章中,我们将探讨下可能有的其他实现方式来实现文本块的功能。

获得行分隔符

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

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

String newLine = System.getProperty("line.separator");

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

System.out.println(System.lineSeparator());

方法。

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

String 字符串拼接

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

public String stringConcatenation() {
    return "Get busy living"
            .concat(newLine)
            .concat("or")
            .concat(newLine)
            .concat("get busy dying.")
            .concat(newLine)
            .concat("--Stephen King");
}

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

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

public String stringConcatenation() {
    return "Get busy living"
            + newLine
            + "or"
            + newLine
            + "get busy dying."
            + newLine
            + "--Stephen King";
}

字符串 String Join

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

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

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 的 + 操作符:

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 的源代码的话就了解了。)

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 类。

public String guavaJoiner() {
    return Joiner.on(newLine).join(ImmutableList.of("Get busy living",
        "or",
        "get busy dying.",
        "--Stephen King"));
}

从文件中载入

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

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

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

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

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,因此不少情况下还是需要使用替代的实现方式。

相关推荐

超越JSON.parse:JavaScript中高效反序列化的艺术

当我们需要在网络间传输数据或将数据存储到本地存储时,我们通常会将JavaScript对象转换为字符串,然后在需要时再将其转换回对象,这就是数据序列化与反序列化。虽然JSON.parse()和JSON....

如何给别人网页上增加内容通过Chrome扩展为网页添加快速滚动功能

ContentScripts来看开发网站的介绍,ContentScripts是一类在网页上下文中运行的文件。它们可以使用标准的DOM接口,实现读取浏览器访问的网页的详细信息,比如网页的DOM结构...

JavaScript执行栈和执行上下文(js 执行上下文与执行栈)

在JavaScript中,执行栈和执行上下文是理解代码执行流程和作用域链的关键概念。它们决定了代码如何执行以及变量和函数如何被查找和访问。本文将详细介绍执行上下文的生命周期、执行栈的工作原理以及它们在...

防止浏览器缓存特定JS文件的常用方法

防止浏览器缓存特定JavaScript文件的常用方法:1.添加版本号或时间戳在引用JavaScript文件时,在URL中添加一个版本号或时间戳作为查询参数。这样每次更新文件后修改这个参数值,就能让浏...

前端面试:JavaScript 字符串的常用方法?

JavaScript字符串是一种不可变的数据类型,因此在使用字符串时需要注意以下几个方法:charAt(i):返回指定索引位置的字符。concat(str[,start[,end]]):连接...

Sequelize 在 Node.js 中的详细用法与使用笔记

1.Sequelize简介Sequelize是一个基于Promise的Node.jsORM(Object-RelationalMapping)工具,支持PostgreSQL、My...

前端js加密解密常用的六种方法(js加密解密源代码)

一、MD5加密可以使用md5插件进行加密插件地址:github.com/blueimp/JavaScript-MD5计算给定字符串值的(十六进制编码)MD5哈希值:计算给定字符串值和键的(十六进制编...

javascript深拷贝浅拷贝原理分析(js深拷贝和浅拷贝如何实现)

用js处理数据的时候经常遇到这样一个问题,需要保留原始数据不变情况下,进行一系列数据操作,这时候需要制作一份原始数据的副本数据来进行操作注意的是引用数据类型和基本数据类型在内存中存储方式是不一样的,只...

1、从零开始了解和使用WPS的js宏(JSA)

最近使用了一下wps的宏本地客户端功能进行了数据查询,与vba相比感觉还是比较好用的。(所谓本地客户端就是指单机使用运行的wps程序)VBA因为长时间的发展,胜在功能比较强大,支持一些Active...

JavaScript字符串查找方法总结(js查找子串)

在JavaScript中,查找字符串的常用方法有以下几种,根据不同的需求选择合适的方式:1.indexOf()/lastIndexOf()作用:查找子字符串首次出现的位置(indexOf)或...

JavaScript 合并数组的三种方法(js数组合并的几种方法)

数组作为一种数据结构,表示索引项的有序集合。经常会使用到数组,尤其是将多个数组进行合并,比如将数组[1,2,3]和数组[4,5,6]合并,最终得到数组[1,2,3,4,5,6]。数组的合并分不...

JS短文,如何正确理解Splice() 函数与Slice() 函数

转载说明:原创不易,未经授权,谢绝任何形式的转载Splice()函数与Slice()函数都是JavaScript数组中常用的方法之一。虽然它们的名称很相似,但它们的作用却截然不同。在这篇文章...

JavaScript字符串concat()方法教程

一、简介JavaScript中的字符串是一种基本数据类型,它可以用单引号或双引号括起来。concat()方法用于将一个或多个字符串连接起来,并返回连接后的新字符串。concat()方法不会改变原始字符...

手把手教你常用的59个JS类方法(js几种类型)

前言前端开发有时会处理一部分后台返回的数据,或者根据数据判断做一些处理;这个时候就非常有必要将一些常用的工具类封装起来;本文根据常用的一些工具类封装了59个方法,当然还有很多用的较少前期没有录...

js数组常用方法总结(js数组的使用)

首先说明,本文没技术含量,都是js的知识,只是为以后查阅方便。另外我们开了一个免费的讲解web前端课程,有兴趣的朋友可以去看,详情地址:http://fe.qietu.com/forum.php1、创...

取消回复欢迎 发表评论: