gpt4 book ai didi

java - BufferedReader 在到达空行时停止读取

转载 作者:行者123 更新时间:2023-11-30 08:18:42 24 4
gpt4 key购买 nike

我有一个正在读取文件的 BufferedReader。该文件很容易在 2 个段落之间有一个空行,例如:

Lorem ipsum dolor sit amet, mel in docendi eleifend sapientem, mei cu natum possit salutandi. Quaeque legimus appareat cum in, tamquam cotidieque duo in. Justo ubique efficiantur ei sit, idque dicat sadipscing ad sit. Amet consul disputationi ei sea. At reque lorem quo, animal singulis per cu, usu euripidis reprimique inciderint eu.

Ocurreret dissentias ei per. Copiosae vulputate vel ei, ne est dissentias adversarium, ad quo graecis nostrum volutpat. Vix ut sale persequeris, id est volumus noluisse, mel et ridens molestiae. Ut qui iriure volutpat contentiones, unum propriae inciderint ut duo. Ei singulis delicata per. Usu verterem nominati in.

BufferedReader 在到达第一段末尾时停止读取。我知道为什么它认为只要找到一个空行就停止,它认为它是文件的末尾,这是我的问题。

我一直在使用 while 循环方式遍历文件。

我在这个问题上纠结了很多次,所以我放弃了原来的 bufferedreader 方法并多次编辑它,但它是这样的:(伪代码,这段代码不正确。主要注意 while 循环)

public static String currenttxt() throws IOException {
BufferedReader br = new BufferedReader(new FileReader(file));
try {
while (br.readLine() != null) {
return br.readline();
}
} catch (Exception e) {
e.PrintStackTrace();
}
}

我该如何解决这个问题?

最佳答案

正如已经提到的评论中所述,您的函数由于 while (br.readLine()) 而丢弃第一行,并在读取第二行后离开循环。

您应该将已读取的行保存在某个局部变量中。

public static String currenttxt() throws IOException {

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
StringBuilder b = new StringBuilder();
try {

String line = br.readLine();
while (line != null) {
b.append(line);
b.append(System.getProperty("line.separator"));
line = br.readLine();
}

} catch (Exception e) {
e.printStackTrace();
throw e;
}

// remove the last line separator at the end using trim()
return b.toString().trim();
}

使用 java 7 可以简化为

public static String currenttxt() throws IOException{
List<String> lines;
lines = Files.readAllLines(FileSystems.getDefault()
.getPath(file.getAbsolutePath()));

StringBuilder b = new StringBuilder();
boolean insertNewLine = false;
for (String line : lines) {
if (insertNewLine)
b.append(System.getProperty("line.separator"));

b.append(line);
insertNewLine = true;
}

return b.toString();
}

第二个示例展示了一种如何避免结尾处的 trim() 的方法。另一种方法是从 StringBuilder b 中删除最后一行分隔符。

关于java - BufferedReader 在到达空行时停止读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27311924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com