0

我正在尝试在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() 我读了另一行,在一个循环中我读了两行。我怎样才能解决这个问题?

谢谢

4

4 回答 4

0

为了清楚起见,让我们展开代码:

while (true) {
  line = s.nextLine();
  if (line == null || line.contains("OK")) break;
  if (line.contains("BOOK")) { ... }
}

不幸的是"BOOK""OK"在它里面,所以第二个条件是不可达的。

您需要更仔细地查看文件的语法才能正确解析它。

于 2013-07-08T03:03:29.910 回答
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
于 2013-07-08T03:09:37.057 回答
0

尝试这个

while (s.hasNextLine()) {
      String line = s.nextLine();
      if (line.contains("BOOK")) {
          ...
      } else if (line.contains("OK") {
         break;
      }
}
于 2013-07-08T03:10:44.663 回答
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永远不会运行。

于 2013-07-08T04:02:27.563 回答