2013-10-29 124 views
0

這段代碼似乎不工作;我在csv文件中有10行,但只有5行正在打印出來。只有行2,4,6,8,10正在打印出來。readLine在跳出時跳過行

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

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

我想我有一個想法,爲什麼它跳過奇數,但我不知道如何解決它。 因爲我告訴它readLine()兩次,我相信它從第一個,然後第三個,然後依此類推。

+0

您應該給我們提供CSVFile的實現。 –

+0

通過調用rwadLine()一次並將結果存儲在一個變量中來修復它;那麼你可以根據需要使用它兩次或100次。 –

回答

4

因爲您在while循環內調用readLine兩次。試試這個:

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

    if (text==null) 
     break; 

讀者是有狀態記得它從你調用的方法最後一次讀...

+0

仍然打印出只有偶數 – user2883071

+0

再試一次 - 我做了一個小修改打印到文件之前,從循環內讀取 –

+0

改變工作..謝謝..我錯過了什麼,發生(CSVFile.readLine()),它會計數..這意味着,即使在檢查if語句時,它會增加一.. – user2883071

1

the readLine() method每個呼叫消耗輸入的下一行。你正在調用它兩次,每個循環迭代while

嘗試修改您的循環,以便每個循環只調用readLine()一次。的標準方法是:

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

此行分配給text,並在同一行比較null所有。

+0

我已經試過這個。它只給我奇數。 – user2883071

+0

然後不知何故,你仍然每次循環調用readLine()兩次。 – rgettman

1

簡單。不要調用readLine兩次。

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

    text = CSVFile.readLine(); 
} 
+0

如果我不叫它兩次..它將保持在第一行的初始電話..重複第一行10次 – user2883071

1

你的猜測是正確的。實際上,if塊已完全過時,因爲您已在while循環條件中檢查該塊。試試這個:

String text = CSVFile.readLine(); 
while (text != null) { 
    System.out.println(text); 
    text = CSVFile.readLine(); 
} 
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(); 
} 
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); 
} 
+0

打印出只有奇數行 – user2883071

0

在代碼中發生的事情是,在打印之前調用的readLine()方法的兩倍。請嘗試以下操作:

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