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 是首选方案。否则,可以根据场景选择 StringBuilderString.joinStringWriter

所有示例代码都可以在 GitHub 仓库 上找到。


原始标题:Java Multi-line String