You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何给读取的多行字符串首尾分别添加{和}?

给多行文本首尾添加括号的解决方案

我来帮你搞定这个问题!你现在的代码会给每一行都套上括号,但你想要的是第一行开头加{,最后一行结尾加}(或者把所有行合并到一个{}里,就像你给出的示例那样)。这里有几种简单易实现的方法:

方法1:先收集所有行再统一处理(最直观)

这种方式先把所有读取到的行存起来,之后根据行的位置添加符号,逻辑清晰不容易出错:

import java.util.ArrayList;
import java.util.List;

// 先收集所有行
List<String> allLines = new ArrayList<>();
String output;
while ((output = br.readLine()) != null) {
    allLines.add(output);
}

// 处理输出
if (!allLines.isEmpty()) {
    StringBuilder result = new StringBuilder();
    // 第一行开头加{
    result.append("{").append(allLines.get(0));
    // 处理中间行(如果有的话)
    for (int i = 1; i < allLines.size() - 1; i++) {
        result.append(" ").append(allLines.get(i)); // 用空格分隔行内容,可根据需求调整为换行符\n
    }
    // 最后一行结尾加}
    if (allLines.size() > 1) {
        result.append(" ").append(allLines.get(allLines.size() - 1));
    }
    result.append("}");
    System.out.println(result.toString());
}

这个方法会把所有行用空格连接起来,外面套上{},完全匹配你给出的示例输出。如果需要保留换行(比如第一行开头加{,最后一行结尾加},中间换行),只需要把空格换成\n即可。

方法2:直接拼接成字符串(最简洁)

如果你的需求就是把所有行合并成一个字符串再套括号,那用StringBuilder直接拼接是最省事的:

StringBuilder sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
    if (sb.length() > 0) {
        sb.append(" "); // 行之间用空格分隔,可替换成换行符\n
    }
    sb.append(output);
}
// 输出最终结果
System.out.println("{" + sb.toString() + "}");

这个代码非常简洁,几行就搞定,完全满足你给出的示例输出要求。

方法3:边读边处理(节省内存)

如果不想把所有行都存在内存里,可以边读取边判断当前行是否是第一行或最后一行:

String output;
// 先读取第一行
if ((output = br.readLine()) != null) {
    // 第一行开头加{
    System.out.print("{" + output);
    String nextLine;
    // 循环读取剩下的行
    while ((nextLine = br.readLine()) != null) {
        // 先尝试读取下一行,判断当前行是否为最后一行
        String tempLine = br.readLine();
        if (tempLine == null) {
            // 当前nextLine是最后一行,输出并加}
            System.out.println(" " + nextLine + "}");
            break;
        } else {
            // 不是最后一行,输出当前行,把多读的行推回流中
            System.out.print(" " + nextLine);
            if (br instanceof PushbackReader) {
                ((PushbackReader) br).unread(tempLine.getBytes());
            }
        }
    }
    // 处理只有一行的情况
    if (!br.ready()) {
        System.out.println("}");
    }
}

不过这种方式需要处理PushbackReader的转换,相对麻烦一点,如果你读取的内容不大,更推荐前两种方法。

内容的提问来源于stack exchange,提问作者Manu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:57:05