有没有一种方法可以读取一行和下一行,在java中迭代.txt文件?

ffscu2ro  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(261)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

14天前关门了。
改进这个问题
我想用bufferreader读取一行.txt文件。但我的问题是,我需要把一行和下一行一起读,然后转到下一行,用下一行再读一遍。举个例子:

A
B
C
D

我需要读a和b(和进程),然后是b和c(进程),然后是c和d。
我是否需要创建一个数组来存储每一对,然后进行处理?或者我可以在迭代文件时进行处理?我现在正在做:

while (file = in.readLine() != null) {
            String[] data = file.split(",");
            String source = data[0];
            file = in.readLine();
            String destination = data[0];        
        }

这里的目标是将上一个目的地作为下一个源。但是当我的while循环转到下一行时,我不跳过一个字母吗?
感谢您的关注!

9wbgstp7

9wbgstp71#

你可以这样做:

String a = in.readLine();
        if (a == null) {
            return;
        }

        for (String b; (b = in.readLine()) != null; a = b) {
            // do smth

        }

也许流管道的reduce操作对您也有帮助。例如,如果要将所有行合并在一起:

Optional<String> reduce = in.lines().reduce("", (a,b) -> a+b);
   if (reduce.isPresent()) {
     // ..
   } else {
     // ...
   }
rqqzpn5f

rqqzpn5f2#

我会用两个元素 String 数组作为“缓冲区”。

String[] buffer = new String[2];
try (FileReader fr = new FileReader("path-to-your-file");
     BufferedReader br = new BufferedReader(fr)) {
    String line = br.readLine();
    while (line != null) {
        if (buffer[0] == null) {
            buffer[0] = line;
        }
        else if (buffer[1] == null) {
            buffer[1] = line;
        }
        else {
            // Do whatever to the contents of 'buffer'
            buffer[0] = buffer[1];
            buffer[1] = line;
        }
        line = br.readLine();
    }
    // Do whatever to the contents of 'buffer'
}
catch (IOException xIo) {
    xIo.printStackTrace();
}

当您退出 while 循环,您尚未处理文件的最后两行,因此需要在退出循环后执行最后一次处理。

相关问题