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() 两次,我相信它从第一个开始,然后是第三个,然后以此类推。

4

7 回答 7

4

因为您readLine在 while 循环中调用了两次。尝试这个:

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循环迭代都会调用它两次。

尝试修改您的循环,使其readLine()每个循环仅调用一次。标准方法是:

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

这会将行分配给一行text并将其与null所有行进行比较。

于 2013-10-29T17:48:20.863 回答
1

简单的。不要调用 readLine 两次。

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

您正在跳线,因为您正在阅读两次。

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(),它会将光标的位置向前移动一位。

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() 方法。尝试跟随,

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