0

Javaでファイルを1行ずつ読み込もうとしています。これが私のコードです:

Scanner s= new Scanner(new FileReader("outputfile.txt"));
    String line = null;
    while (!(line = s.nextLine()).contains("OK")) {
        if (line.contains("BOOK")) {
            //do something
        }   
    }

私がやろうとしているのは、ファイルを1行ずつ読み取り、次の行に「OK」が含まれている場合は読み取りを停止することです。しかし問題は、私が持っているので

!(line = s.nextLine()).contains("OK")

列に並ぶたびに

if (line.contains("BOOK")), 

line=s.nextLine() 以来、私は別の行を読み、1 つのループ サイクルで 2 行を読みました。どうすればこれを修正できますか?

ありがとう

4

4 に答える 4

0

=オペレーターの仕組みを誤解しています。

line = s.nextLine()

を使用するたびlineに が呼び出されるわけではありませんs.nextLine()。それよりも、

line = s.nextLine()

s.nextLine()「一度呼び出して、返さlineれたものを参照する」ことを意味します。s.nextLine()したがって、

if (line.contains("BOOK"))

への別の呼び出しは発生しませんs.nextLine()line以前の代入によって格納された値のみを検索します。ループは反復ごとに 2 行ではなく 1 行を読み取ります。試してみて、行がスキップされたように見えた場合、それはおそらく「BOOK」に「OK」が含まれているためであり、 のコードはif実行されません。

于 2013-07-08T04:02:27.563 に答える
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 に答える