计算文件中的单词数

时间:2013-03-22 01:55:45

标签: c# file

此上下文中的单词定义为字母或数字。但是,像\ n这样的东西不算是一个单词。

下面在我的代码中,我试图计算文件中的单词数,但在for循环的局部变量声明中,我得到错误Null Reference exception

我不确定为什么会收到此错误。我得到变量Line等于null,这不应该发生,因为文本文件中有一个单词“hello world”...

StreamReader sr = new StreamReader(filePath);
while (sr.ReadLine()!=null)
{
    Line =sr.ReadLine();
    for (**int i = 1**; i < (Line.Length+1); i++)
    {
        if (Char.IsLetterOrDigit(Line[i]) == true && Char.IsLetterOrDigit(Line[i - 1]) == true)
        {
            if (LetterRecent == false)
            {
               wordCount = wordCount + 1;
            }
            LetterRecent = true;
        }
        else
        {
             LetterRecent = false;
        }
    }
}

sr.Close();

4 个答案:

答案 0 :(得分:3)

你为每一行做了两次ReadLine()。

您可以执行以下操作:

count = 0;
while (line = sr.ReadLine()) {
  char oldChar = 0;
  for (char c in line) {
    if (c != oldChar && Char.IsLetterOrDigit(c)) count++;
    oldChar = c;
  }
}

答案 1 :(得分:0)

在使用之前,您需要声明wordCount

Int wordCount = 0;
while (sr.ReadLine()!=null)
    {

答案 2 :(得分:0)

将循环条件更新为:

while (sr.Peek() >= 0) 
{
    Line = sr.ReadLine();
}

答案 3 :(得分:0)

您通过调用sr.ReadLine()两次丢弃文件中的一半行。如果您在while语句中读取文件的最后一行,则对Line.Length的调用将抛出空引用异常。

尝试一下这个:

var wordCount = 0;
var line = sr.ReadLine();
while( line != null ) {
  for( var i = 1; i < line.Length; i++ ) {
    // Count words
  }
  line = sr.ReadLine();
}