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

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

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

文本块

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

public String textBlocks() {return """Get busy livingorget 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,因此不少情况下还是需要使用替代的实现方式。

Java 多行字符串 - Java - OSSEZ

Java 多行字符串相关推荐

  1. [转][Java]尝试解决Java多行字符串的编辑问题

    转自:https://blog.csdn.net/jiuwuerliu/article/details/51207045 参考了:https://www.v2ex.com/amp/t/445522 除 ...

  2. java 多行字符串_java字符串多行写法

    有一个很长的字符串,想分成多行书写,主要为了美观. VB代码中可以将一个很长的字符串分成多行书写,例如: String str="adfasdfasdfas \ asdfasdfasdfas ...

  3. java多行字符串常量,【转】Error,java对常量池来说字符串xxx的UTF8表示过长的解决及其理解...

    做项目,客户端这里自己模拟json数据时,一时没忍住搞得json字符串太长了(idea上大概有600多行吧),这个问题就蹦出来了.老方法直接google.百度然后看到一堆有关String 字符串常量池 ...

  4. java编写字符串连接程序注释_一种利用JAVA注释支持多行字符串的方法

    从BeetlSql项目将SQL全放在Beetl模板里得到启发,又想到一个比较偏门的用法.以下代码实测通过,详见jSqlBox项目的test\examples\multipleLineSQL\SqlTe ...

  5. java 字符串文字筛选_拜托,Java。 最终是否支持多行字符串文字

    java 字符串文字筛选 我了解Java语言的思想很难以向后兼容的方式进行维护. 我知道JDK API(例如集合)的想法很难打破. 是. 我不明白为什么Java 仍然没有多行字符串文字. 您多久编写一 ...

  6. 拜托,Java。 最终是否支持多行字符串文字

    我了解Java语言的思想很难以向后兼容的方式进行维护. 我知道JDK API(例如集合)的想法很难打破. 是. 我不明白为什么Java 仍然没有多行字符串文字. 您多久编写一次这样的JDBC代码(或您 ...

  7. java 读取文本 读取每行字符串

    java 读取文本 读取每行字符串 开发中难免遇到一些需要临时处理的问题, 比如产品经理给到你一个TXT文件,帮我把这个数据 怎么怎么样...很急 现在就要 当然这种事情也是见怪不怪 读取文件的代码其 ...

  8. Java学习之字符串

    /*字符串:字符串就是一系列字符的序列.在java语言中字符串是一对双引号("")括起来的字符序列 声明:字符串常量 与 字符常量不同,字符常量是用单引号(')括起来的字符,而字符 ...

  9. 【Groovy】字符串 ( 字符串拼接 | 多行字符串 )

    文章目录 一.字符串类型变量 二.多行字符串 三.完整代码示例 一.字符串类型变量 在双引号字符串中 , 使用 ${变量名} 进行字符串拼接 , ${变量名} 符号的取值 , 是在 定义时取值 ; d ...

最新文章

  1. 机器学习中算法的性能评估
  2. 微生物样本取样及微生物基因组DNA提取建议
  3. Oracle必知基础总结
  4. sql移动加权计算利润_一文搞懂股票指数的4种加权方式
  5. Android项目之——Activity悬浮并可拖动
  6. 本地git首次连接远程github仓库
  7. R12.2 新功能:值集安全性设置及效果 Flexfield Value Set Security
  8. 【数据结构与算法】之深入解析“石子游戏III”的求解思路与算法示例
  9. 关于统计学,几个简单易懂的小故事
  10. 使用datagrid时json的格式
  11. 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
  12. python做自动化控制postman_Python自动化学习笔记(1)认识接口测试以及postman、Charles工具简单应用...
  13. STM32F429i-DISCO FreeRTOS keil STM32CubeMX
  14. C++常用数据类型和Windows常见数据类型
  15. blogspot博客搬家
  16. 同一操作系统中安装多个不同版本谷歌Chrome浏览器
  17. 正态性检验中的统计量D值和统计量W值如何计算?
  18. baidu 地图 3d版 自定义地图样式
  19. Email-FTP-RTSP协议实践研究
  20. java中合并不同子目录下的txt文件(CHM转换成txt的过程)

热门文章

  1. 程序员辞职回老家山洞写代码,二年敲了45万行
  2. 正确理解stem教育
  3. 计算机辅助外科技术包括哪些,计算机辅助外科手术逐步拓展
  4. P2358 蚂蚁搬家
  5. 使用matplotlib python数据可视化系列创建3d视频可视化
  6. Java 作业 金额的中文大写方式
  7. 如何设置能够使网页中的FLASH背景透明
  8. 带你打造一套 APM 监控系统(四)
  9. Python办公自动化学习笔记(二)—Python语法基础
  10. 如何持续运营好社群?为什么越来越多的社群会死掉?