此上下文中的单词定义为字母或数字。但是,像\ 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();
答案 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();
}