使用tokenizer来计算文件中的单词数量?

时间:2014-03-02 19:17:22

标签: java bufferedreader stringtokenizer

我正在创建一个程序,让用户选择一个文件然后程序从文件中读取。现在我被告知要使用bufferedreader和string tokenizer来制作程序。到目前为止,我有程序打开文件并计算行数。但是单词的数量并不那么容易。

到目前为止,这是我的代码:

int getWords() throws IOException
{
   int count = 0;
   BufferedReader BF = new BufferedReader(new FileReader(f));
   try  {
      StringTokenizer words = new StringTokenizer(BF.readLine()); 
      while(words.hasMoreTokens())
      { 
         count++;
         words.nextToken(); 
      }
      BF.close();
   }  catch(FileNotFoundException e)  {
   }    
   return count;
}

缓冲读卡器一次只能读取一行,但我不知道如何读取更多行。

2 个答案:

答案 0 :(得分:1)

计算单词,你可以使用countTokens()代替循环

阅读所有行使用

String line = null;
while(null != (line = BF.readLine())) {
StringTokenizer words = new StringTokenizer(line); 
   words.countTokens();//use this value as number of words in line
}

答案 1 :(得分:0)

正如您所说,缓冲读卡器将一次读取一行。所以你必须读取行,直到没有更多的行。当到达文件末尾时,readLine()返回null。

所以做这样的事情

int getWords() throws IOException {
  int count = 0;
  BufferedReader BF = new BufferedReader(new FileReader(f));
  String line;
  try {
    while ((line = BF.readLine()) != null) {
      StringTokenizer words = new StringTokenizer(line); 
      while(words.hasMoreTokens()) { 
        count++;
        words.nextToken(); 
      }    
    }
    return count;
  } catch(FileNotFoundException e)  {
  } finally {
    BF.close();
  }
  // Either rethrow the exception or return an error code like -1.
}