2015-02-10 39 views
0

我正在嘗試編寫一個程序來計算文本文件中的單詞並統計多少行,但我仍然收到無行錯誤。No Line發現錯誤,但我不知道如何?

import java.util.*; 
import java.io.*; 

public class input { 

public static void main(String[] args) throws FileNotFoundException { 

    String name; 
    int lineCount = 0; 
    int wordCount = 0; 
    File input = new File("C:\\Users\\Ceri\\workspace1\\inputoutput\\src\\inputoutput\\lab1task3.txt"); 
    Scanner in = new Scanner(input); 

    while(in.hasNextLine()){ 
     while(in.hasNext()){ 
      wordCount++; 
      in.next(); 
     } 
     lineCount++; 
     in.nextLine(); 
    } 

    System.out.println(lineCount); 
    System.out.println(wordCount); 
    in.close(); 


} 

} 

該問題奠定了while(in.hasnextline())循環。

+0

請提供該代碼的堆棧跟蹤。 – 2015-02-10 19:53:59

回答

1

這是因爲你的inner while循環從你的掃描器中吸取了所有的輸入字符。 in.hasNext()不會停在換行符。

+0

我忘了補充一點,我還需要數線。 – 2015-02-10 20:04:39

+0

我明白了..只是在告訴你什麼導致了'不行'錯誤。計算單詞和句子的方法有很多種。其中一個解決方案是由@Elizion給出的。可能不是最高效的,但可以完成工作。 – owaism 2015-02-10 20:09:34

0

您正確實施hasNextLine()hasNext()這樣你已經通過您scanner所有的標記你的內心while內讀取。

一個簡單的方法來讀取每個字和線將實現這樣的:

int words = 0; 
int lines = 0; 

    while(in.hasNextLine()) { 
     lines++; 
     String line = in.nextLine() 
     words += new StringTokenizer(line, " ,").countTokens(); 
    } 
+0

This works .. kind of,words的值應該是13,當我運行它時是14. – 2015-02-10 20:08:16

+0

@ceriWestcott你必須相應地改變你的單詞分隔符!這是我知道如何實現它的最短途徑(不要說這是合理的最好的方法) – HavelTheGreat 2015-02-10 20:11:53

0

執行文件的這一

while(in.hasNextLine()) 
{ 
    Scanner ins=new Scanner(in.nextLine()); 
    while(ins.hasNext()) 
    { 
     wordCount++; 
     ins.next(); 
    } 
    lineCount++; 
} 
0

你到達終點,同時通過內部循環循環。一旦到達文件結尾,它就會從內部循環中出來。 lineCount將遞增,然後,in.nextLine()將被執行。掃描儀對象的緩衝區內沒有任何值,因此您得到了這個結果。

試試這個:

while(in.hasNextLine()){ 
    String line = in.nextLine(); 
    lineCount++; 
    String[] words = line.split(" "); 
    wordCount += words.length; 
}