2013-01-17 98 views
0

因此,我正在寫一個java程序,應該保持從用戶分析字符串,直到標準輸入結束(直到他們按CTRL + D或輸入文件的結尾)。該程序按預期工作,但是當按CTRL + D時,會出現空指針異常。下面是有問題的代碼:Tokenizing問題與緩衝讀取器

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
    String line = " "; 
    while (line != null) { 
     line = in.readLine(); 
     String[] tokens = line.split(" "); 
     System.out.println(line); ...... 

空指針旨在字符串[]令牌= line.split(」「);

它看起來像代碼試圖標記化爲空的行。但我認爲我是以一種不會試圖標記空行的方式編寫它的。誰能幫我嗎?

回答

2

while循環更改爲: -

while ((line = in.readLine())!= null) { 

,並刪除裏面的第一線。

請注意,您正在讀取循環內的行,然後再進行測試。所以,你會在文件末尾得到一個NPE

此外,如果您在閱讀後標記文件,我確實更喜歡使用Scanner類。

+0

Thanks Rohit!我發現我的錯誤發佈後這個哈哈 – Haskell

+0

@ user1718698 ..沒問題。 :) –

0

問題是while是一個預檢條件。在循環開始時,line不爲空。您應該改用do-while

while (line != null) { 
    line = in.readLine(); // in the loop, but in.readLine() returns null 
    String[] tokens = line.split(" "); // OH SHI- LINE IS NULL 
    System.out.println(line);