1. 概述
在本篇文章中,我们将学习如何在 Java 中声明多行字符串。
✅ 如果你使用的是 Java 15 或更高版本,可以直接使用官方提供的新特性:Text Blocks(文本块),它能非常方便地处理多行字符串。
❌ 如果你使用的是更早版本的 Java,或者由于某些限制无法使用 Text Blocks,我们也会介绍一些替代方案。
2. 使用 Text Blocks(推荐)
从 Java 15 开始,Java 引入了文本块(Text Blocks)这一特性,用三个双引号 """
来定义多行字符串:
public String textBlocks() {
return """
Get busy living
or
get busy dying.
--Stephen King""";
}
✅ 这是目前最简洁、最直观的方式,无需手动拼接换行符或处理缩进空格。
⚠️ 该特性在 Java 13 和 Java 14 中也可用,但需要启用预览功能(Preview Features)。
3. 获取系统换行符
不同操作系统使用不同的换行符(Windows 是 \r\n
,Linux/macOS 是 \n
),我们可以通过如下方式获取当前系统的换行符:
String newLine = System.getProperty("line.separator");
在后续的示例中,我们会使用这个变量来拼接多行字符串。
4. 字符串拼接(String Concatenation)
如果你不能使用 Text Blocks,可以使用字符串拼接来构造多行内容:
public String stringConcatenation() {
return "Get busy living"
.concat(newLine)
.concat("or")
.concat(newLine)
.concat("get busy dying.")
.concat(newLine)
.concat("--Stephen King");
}
也可以使用 +
操作符达到同样效果:
public String stringConcatenation() {
return "Get busy living"
+ newLine
+ "or"
+ newLine
+ "get busy dying."
+ newLine
+ "--Stephen King";
}
⚠️ 这种方式在字符串较多或拼接频繁时性能较差。
5. 使用 String.join
Java 8 引入了 String.join()
方法,支持使用分隔符将多个字符串拼接成一个:
public String stringJoin() {
return String.join(newLine,
"Get busy living",
"or",
"get busy dying.",
"--Stephen King");
}
✅ 语法简洁,适合静态拼接场景。
6. 使用 StringBuilder
如果你需要在循环中构建一个大字符串,推荐使用 StringBuilder
:
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();
}
✅ 适用于动态拼接、性能更优,尤其在循环中。
7. 使用 StringWriter
StringWriter
是另一种构建多行字符串的方式,通常用于和 IO 流结合的场景:
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();
}
✅ println()
方法自动添加换行符,使用起来非常自然。
8. 使用 Guava Joiner(仅限项目已引入 Guava)
如果你的项目已经使用了 Google Guava,可以考虑使用 Joiner
工具类:
public String guavaJoiner() {
return Joiner.on(newLine).join(ImmutableList.of("Get busy living",
"or",
"get busy dying.",
"--Stephen King"));
}
⚠️ 如果只是为了拼接字符串引入 Guava,性价比不高。
9. 从文件中加载
如果字符串内容很长或经常变化,建议将其放在外部文件中管理,运行时读取:
public String loadFromFile() throws IOException {
return new String(Files.readAllBytes(Paths.get("src/main/resources/stephenking.txt")));
}
✅ 这样可以将内容与代码解耦,便于维护。
10. 利用 IDE 功能
现代 IDE(如 IntelliJ IDEA、Eclipse)支持多行文本的复制粘贴。你可以直接复制多行内容,粘贴到双引号之间,IDE 会自动帮你处理换行符。
⚠️ 注意:这种方式仅适用于编码时的静态字符串,不适用于运行时动态生成。
11. 总结
本文介绍了多种在 Java 中创建多行字符串的方法:
方法 | Java 版本要求 | 是否推荐 | 说明 |
---|---|---|---|
✅ Text Blocks | Java 15+ | 推荐 | 最简洁、最直观 |
❌ String Concatenation | 所有版本 | 不推荐 | 简单但性能差 |
✅ String.join | Java 8+ | 推荐 | 语法简洁 |
✅ StringBuilder | Java 1.5+ | 推荐 | 性能优秀 |
✅ StringWriter | 所有版本 | 推荐 | 适合与 IO 流结合 |
✅ Guava Joiner | 需引入 Guava | 可选 | 适合已有 Guava 的项目 |
✅ 文件读取 | 所有版本 | 推荐 | 适合长文本 |
✅ IDE 多行粘贴 | 所有版本 | 可选 | 仅适用于编码时 |
如果你使用的是 Java 15 或更高版本,Text Blocks 是首选方案。否则,可以根据场景选择 StringBuilder
、String.join
或 StringWriter
。
所有示例代码都可以在 GitHub 仓库 上找到。