2014-03-03 29 views
0

舉例來說,如果我有以下文本行的文件:java中如何用掃描儀讀取和計數款

這是一個例子。這是一個例子。

這是一個例子。這是一個例子。這是一個例子

這是一個例子這是一個例子這是一個例子這是一個例子這是一個例子這是一個例子這是一個例子這是一個例子這是一個例子這是一個例子。

我希望能夠計算這些線爲3個段落。現在我的代碼會將這段代碼記錄爲4段,因爲它不知道段落何時開始和結束。

Scanner file = new Scanner(new FileInputStream("../.../output.txt")); 
int count = 0; 
while (file.hasNextLine()) { //whilst scanner has more lines 
    Scanner s = new Scanner(file.nextLine()); 
    if(!file.hasNext()){ 
     break; 
    } 
    else{ 
     file.nextLine(); 
     count++; 
    } 
    s.close(); 
} 
System.out.println("Number of paragraphs: "+ count); 
file.close(); 

這是我到目前爲止。它讀取文本行,並將每行視爲單個段落。

我想它來治療那些沒有作爲1款它們之間的任何空行,然後在文件計數所有段落的文本行。

+0

是一個靜態格式的文件?你可以檢查一個標籤或「\ t」或空白行嗎? –

+0

你到目前爲止嘗試過什麼?展示一些自己找到解決方案的工作和/或研究,然後尋求自己無法解決的*特定問題的幫助。 –

+0

不清楚你想要什麼。你是否想要統計段落中的單詞數量?如果是這樣,你如何定義段落的開始和結束?這會讓你知道你將如何去做。提示,如果它正在計算你想要的單詞,那麼Scanner.next()會爲你拾取下一個單詞。 –

回答

0

掃描儀可能不是最好的選擇,如果你只是想計算行。 BufferedReader可能更好。

BufferedReader in = new BufferedReader(new FileReader("output.txt")); 
    String line = in.readLine(); 
    int count = 0; 
    StringBuilder paragraph = new StringBuilder(); 
    while (true) { 
     if (line==null || line.trim().length() == 0) { 
      count++; 
      System.out.println("paragraph " + count + ":" + paragraph.toString()); 
      paragraph.setLength(0); 
      if(line == null) 
       break; 
     } else { 
      paragraph.append(" "); 
      paragraph.append(line); 
     } 
     line = in.readLine(); 
    } 
    in.close(); 
    System.out.println("Number of paragaphs: "+ count);  
+0

但它計數沒有問題的罰款線。我只是希望系統能夠知道段落是什麼,即在一行/多行文本之後是否有空格,那是段落的結尾。 atm它將每一行文本當作段落對待 – JD14

+0

您是否想要將每個段落作爲單個字符串來讀取?如果你不關心計數,那麼你應該從你的例子(和標題)中刪除它。 –

+0

如果你想同時使用(count和paragraph),那麼就用我的例子加一個StringBuilder來追加每一行,直到你看到一個空行。 –

0

您將無法使用掃描儀查看空格或換行符。 nextLine()方法消除\ n's。

你需要使用一個類和方法讀取文件的字節,因此可以檢測到空格和換行字符。

嘗試使用FileInputStreamread()方法。