有没有一种方法可以读取一行和下一行,在Java中迭代.txt文件?
我想使用BufferReader读取一行.txt文件。但我的问题是,我需要同时阅读一行和下一行,然后转到下一行,用下一行再做一次。以下是一个例子:有没有一种方法可以读取一行和下一行,在Java中迭代.txt文件?,java,csv,intellij-idea,bufferedreader,Java,Csv,Intellij Idea,Bufferedreader,我想使用BufferReader读取一行.txt文件。但我的问题是,我需要同时阅读一行和下一行,然后转到下一行,用下一行再做一次。以下是一个例子: A B C D 我需要读A和B(和过程),然后是B和C(过程),然后是C和D 我是否需要创建一个数组来存储每对数据,然后进行处理?或者我可以在迭代文件时进行处理吗?我目前正在这样做: while(file=in.readLine()!=null){ String[]data=file.split(“,”); 字符串源=数据[0]; file=in.
A
B
C
D
我需要读A和B(和过程),然后是B和C(过程),然后是C和D
我是否需要创建一个数组来存储每对数据,然后进行处理?或者我可以在迭代文件时进行处理吗?我目前正在这样做:
while(file=in.readLine()!=null){
String[]data=file.split(“,”);
字符串源=数据[0];
file=in.readLine();
字符串目的地=数据[0];
}
这里的目标是将上一个目的地作为下一个源。
但是当我的while循环转到下一行时,我不是跳过了一个字母吗
谢谢你的关注 您可以尝试以下方法:
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 {
// ...
}
Optional reduce=in.lines().reduce(“,(a,b)->a+b);
if(reduce.isPresent()){
// ..
}否则{
// ...
}
我将使用两元素字符串
数组作为“缓冲区”
String[]buffer=新字符串[2];
try(FileReader fr=newfilereader(“文件路径”);
BufferedReader br=新的BufferedReader(fr)){
String line=br.readLine();
while(行!=null){
if(缓冲区[0]==null){
缓冲区[0]=行;
}
else if(缓冲区[1]==null){
缓冲区[1]=行;
}
否则{
//对“缓冲区”的内容执行任何操作
缓冲区[0]=缓冲区[1];
缓冲区[1]=行;
}
line=br.readLine();
}
//对“缓冲区”的内容执行任何操作
}
捕获(IOXIO异常){
xIo.printStackTrace();
}
退出
while
循环时,您尚未处理文件的最后两行,因此您需要在退出循环后最后执行一次处理。。阅读A和B之后,您不需要再次阅读B。你已经有了!谢谢你的回答!我编辑了一点我的消息,因为它不是完全清楚,对不起!为什么不使用调试器逐步检查代码,看看它在做什么?谢谢您的回答!使用字符串[]可能会很好,特别是因为我正在使用csv文件。但是我需要同时处理多个文件,并且必须手动计算最后一行不是很方便。谢谢你的回答!我正在处理csv文件,所以我不认为我可以连接所有这些文件,这将使其无法读取。不过,使用for循环看起来不错。我不知道我们可以把a=b作为下一步。你可以用while循环代替for循环。我的流中的concatation只是一个例子,你可以使用任何二进制函数。我不知道你到底想用这两行做什么,但是你可以试着用reduce。我正在创建一个图表,我把第一行作为源,下一行作为目标。我需要检查每对线是否都是我的图形所需的连接(检查csv文件的另一列),因为在我的图形中必须避免某些线对。如果有点模糊,我很抱歉,但我不希望人们完全解决我的问题,所以我什么都不做。