我试图在java中逐行读取文件。这是我的代码:
Scanner s= new Scanner(new FileReader("outputfile.txt"));
String line = null;
while (!(line = s.nextLine()).contains("OK")) {
if (line.contains("BOOK")) {
//do something
}
}
我想要做的是,我逐行读取文件,如果下一行中有“OK”,那么我就停止阅读了。但问题是,因为我有
!(line = s.nextLine()).contains("OK")
每次我进入该行
if (line.contains("BOOK")),
因为line = s.nextLine() 我读了另一行,在一个循环周期中我读了两行。我该如何解决这个问题?
由于
答案 0 :(得分:0)
为了清晰起见,让我们展开代码:
while (true) {
line = s.nextLine();
if (line == null || line.contains("OK")) break;
if (line.contains("BOOK")) { ... }
}
不幸的是"BOOK"
和"OK"
在里面,所以第二个条件无法访问。
您需要更仔细地查看文件的语法以正确解析它。
答案 1 :(得分:0)
想想你在这做什么......
// LOOP
// Read the next line
// Does this line contain "OK"
// YES -> End loop
// NO -> Does the line contain "BOOK" - Obviously it cant if it didn't contain "OK"
// -> BACK TO LOOP
答案 2 :(得分:0)
试试这个
while (s.hasNextLine()) {
String line = s.nextLine();
if (line.contains("BOOK")) {
...
} else if (line.contains("OK") {
break;
}
}
答案 3 :(得分:0)
您误解了=
运算符的工作原理。
line = s.nextLine()
并不意味着每次使用line
时,都会调用s.nextLine()
。相反,
line = s.nextLine()
表示“拨打s.nextLine()
一次,并line
参考s.nextLine()
返回的内容”。因此,
if (line.contains("BOOK"))
不会再次调用s.nextLine()
。它只查找前一个赋值存储在line
中的值。循环每次迭代读取一行,而不是两行。如果你试过它,它似乎跳过行,那可能是因为“BOOK”包含“OK”,所以if
中的代码永远不会运行。