0

この文脈で定義される単語は、文字または数字です。ただし、\nのようなものは単語とは見なされません。

以下のコードでは、ファイル内の単語数をカウントしようとしていますが、forループのローカル変数宣言でエラーが発生しますNull Reference exception

このエラーが発生する理由がわかりません。テキストファイルに「helloworld」という単語が1つ含まれているため、発生しないはずの変数Lineがnullになります。

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() を2回実行しています。

次のようなことができます:

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() を 2 回呼び出して、ファイル内の行の半分を破棄しています。while ステートメントでファイルの最後の行を読み取ると、Line.Length の呼び出しで null 参照例外がスローされます。

これを試してください:

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 に答える