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
相关产品推荐
相关产品推荐

