0

このコードは機能していないようです。csv ファイルには 10 行ありますが、印刷されるのは 5 行だけです。行 2、4、6、8、10 だけが印刷されます。

String text = CSVFile.readLine();
    while (text != null){
    //lines.add(infile.next());
    //outfile.println(lines);
    outfile.println(CSVFile.readLine());

    if (CSVFile.readLine()==null)
        break;
    }

奇数をスキップする理由はわかっていると思いますが、修正方法がわかりません。readLine() を 2 回実行するように指示しているので、1 回目から 3 回目というように飲み込んでいると思います。

4

7 に答える 7

4

readLinewhile ループ内で 2 回呼び出すためです。これを試して:

String text = CSVFile.readLine();
    while (text != null){
    outfile.println(text);
    text = CSVFile.readLine();

    if (text==null)
        break;

リーダーはステートフルで、最後にメソッドを呼び出したときに読み取った場所を記憶しています...

于 2013-10-29T17:48:09.507 に答える
1

メソッドを呼び出すたびにreadLine()次の入力行が消費されます。whileループの繰り返しごとに2回呼び出しています。

ループごとに 1 回だけ呼び出すようにループを変更してみてくださいreadLine()。標準的な方法は次のとおりです。

String text;
while ((text = CSVFile.readLine()) != null)
{
    // Process the line here.
}

これにより、行が割り当てられ、すべてが 1 行でtext比較されます。null

于 2013-10-29T17:48:20.863 に答える
1

単純。readLine を 2 回呼び出さないでください。

String text = CSVFile.readLine();
while (text != null){
    outfile.println(text);

    text = CSVFile.readLine();
}
于 2013-10-29T17:48:36.873 に答える
1

あなたの推測は正しいです。実際、ループ条件ifをチェックしているため、ブロックは完全に廃止されています。while代わりにこれを試してください:

String text = CSVFile.readLine();
while (text != null) {
    System.out.println(text);
    text = CSVFile.readLine();
}
于 2013-10-29T17:48:45.573 に答える
1

2回読んでいるので、行をスキップしています。

String text = CSVFile.readLine(); <-- here
while (text != null){
    outfile.println(CSVFile.readLine()); <-- here

    if (CSVFile.readLine()==null) 
        break;
}

そこから一度読んでみてください。

String text = CSVFile.readLine();
while (text != null){
    outfile.println(text);
    text = CSVFile.readLine();
}
于 2013-10-29T17:49:00.950 に答える
1

を呼び出すとreadLine()、カーソルの位置が 1 つ進むためです。

String text = CSVFile.readLine(); <- line 1
while (text != null){
    outfile.println(CSVFile.readLine()); <- print line 2 
    if (CSVFile.readLine()==null) <- goes to line 3 so next time the println will print line 4 
       break;
}

それを避けるには、次のようにします。

String text = null;
while ((text = CSV.readLine()) != null){
  outfile.println(text); 
}
于 2013-10-29T17:49:01.873 に答える
0

あなたのコードでは、印刷の前に readLine() メソッドを 2 回呼び出します。フォローしてみて、

String text = CSVFile.readLine();
while (text != null){
  outfile.println(text);
  text = CSVFile.readLine();
}
于 2013-10-29T17:49:46.997 に答える