0

在这种情况下,一个词被定义为一个字母或一个数字。但是,像 \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

4 回答 4

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;
  }
}
于 2013-03-22T01:59:19.477 回答
0

您需要wordCount在使用前声明。

Int wordCount = 0;
while (sr.ReadLine()!=null)
    {
于 2013-03-22T02:01:01.397 回答
0

更新你的循环条件是这样的:

while (sr.Peek() >= 0) 
{
    Line = sr.ReadLine();
}
于 2013-03-22T02:03:56.810 回答
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();
}
于 2013-03-22T02:07:07.303 回答