c#分割字符串时出现空引用异常
本文关键字:引用 异常 分割 字符串 | 更新日期: 2023-09-27 18:05:54
我试图找出如何解决一个NullReferenceException在我的c#控制台应用程序。
这是一个基本的水平。
实际上,我有一个叫做getWord()的方法。它接受两个参数——字符串和整数。
getWord使用整数,并根据该整数从字符串(基于空格,无逗号或任何其他类型的标点符号)获取单词
它应该是这样工作的:
getWord("john is 17 ", 0)结果为"john"
getWord("john is 17 ", 1)结果为"is"
getWord("john is十七",2)结果为"十七"
在程序中,我声明了一个简单的字符串数组,对其进行初始化,并向其中添加两个元素。
循环遍历数组的每个元素并打印数组中每个元素的第一个单词- getWord(line, 0)。
问题是控制台打印每行的第一个单词,但之后我在这行上得到一个NullReferenceException:
string[] words = inputString.Split(new char[] { ' ' });
我不知道为什么。我使用的是Visual c# 2008和。net Framework 3.5。我一直得到NullReferenceExceptions在我所有的c#代码,我不知道为什么。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
public static string[] levelCurList;
static void Main(string[] args)
{
levelCurList = new string[500];
levelCurList[0] = "52 afdaf";
levelCurList[1] = "dfsf afdf";
foreach (string line in levelCurList)
{
Console.WriteLine(getWord(line, 0));
}
}
public static string getWord(string inputString, int word)
{
string[] words = inputString.Split(new char[] { ' ' });
if (words.Length >= word)
return words[word];
else
return "";
}
}
}
将新的string[500]
更改为new string[2]
,您的数组中有500
元素,您只初始化其中两个,其余的为null。
您正在传递null字符串到getWord
方法,这就是为什么您得到异常。你也可以使用:
foreach (string line in levelCurList.Take(2))
或:
foreach (string line in levelCurList.Where(x => x != null))
注意:还应该将if (words.Length >= word)
更改为if (words.Length > word)
(删除=
),否则当word
参数等于words.Length
时,您将获得IndexOutOfRange
异常。由于数组索引为零,因此字符串的最后一个元素是words[words.Length - 1];
而不是words[words.Length];