2012-02-13 62 views
0

我正在製作一個簡單的Java程序,它應該讀取一個txt文件並計算特定單詞被提及的次數。這是我在下面,它編譯和運行良好,但一直返回0的答案時,它應該運行良好的成千上萬...單詞被提及的次數

在這種情況下,我想知道多少次「我通過」此文件...

/*AUTHOR Yun Lee 
Finding out the number of tweets per day*/ 

import java.io.*; 
import javax.swing.*; 
import java.util.Scanner; 

class tweetnumber 
{ 

public static void main(String args[]) 
{ 
    try 
    { 

     FileInputStream fstream = new FileInputStream("tacobell.23jan2012.txt"); 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String strLine; 

     int counter1 = 0; 
     String s = "am via"; 

     while ((strLine = br.readLine()) != null) 
     { 
      System.out.println (strLine); 
      if (strLine.contains(s)) 
      { 
       counter1++; 
      } 

     } 
     in.close(); 
     System.out.println("There were " + counter1 + " messages in the AM of this day"); 
    } 

    catch (Exception e) 
    { 
     System.err.println("Error: " + e.getMessage()); 
    } 

} 
} 
+0

該文件是否由您的'println'語句打印?試圖設置一個斷點並檢查'strLine'以確保它包含「am via」? – Blorgbeard 2012-02-13 17:50:17

+1

這應該被標記爲家庭作業嗎?順便說一下,如果您要查找的字符串連續出現多次,會發生什麼情況? – jambriz 2012-02-13 17:56:46

+0

「'」是通過「'應該只是一個單詞嗎?或者你是否在尋找「am」和「via」這兩個詞的出現? – 2012-02-13 18:36:30

回答

0

DataInputStream可能不會正確地將您的文件從字節轉換爲字符。嘗試刪除它,並將FileInputStream傳遞給InputStreamReader構造函數。

1

FileInputStreamsupposed to be used

的FileInputStream是指用於讀取諸如圖像數據的原始字節流。爲了讀取字符流,請考慮使用FileReader。

因爲您正在嘗試閱讀字符,請嘗試以不同方式打開文件。您可以嘗試:

File f = new File("tacobell.23jan2012.txt"); 
BufferedReader br = new BufferedReader(new FileReader(f)); 
1

我測試了它,它適用於編碼爲ANSI的文本文件。 然後,我在編碼爲Unicode的同一個文件上嘗試使用另外一個「腥」字符,如:♣,並在那裏:0 因此,請檢查您的輸入文件或您閱讀它的方式。

嘗試this post here

+0

非常感謝你!嘗試從Unicode更改爲ANSI,並完美地工作!非常感謝!! – 2012-02-13 21:11:53

+0

我很高興能幫上忙。如果它解決了您的問題,您可以使用答案左側的綠色勾號接受它。 – 2012-02-14 20:31:23