我在从字符串中搜索子字符串时遇到问题。
StreamReader objReader = new StreamReader("D:\\C#\\Mid\\project\\real estate\\store.txt");
string sLine = "";
ArrayList arrText = new ArrayList();
Console.Write("Type the keyword you want to search : ");
string search = Console.ReadLine();
while (sLine != null)
{
sLine = objReader.ReadLine();
int x = sLine.IndexOf(search);
Console.WriteLine(x);
if (sLine != null && x != -1)
{
Console.WriteLine(x);
arrText.Add(sLine);
}
Console.WriteLine(x);
}
Console.WriteLine("Here");
objReader.Close();
foreach (string sOutput in arrText)
Console.WriteLine(sOutput);
Console.ReadLine();
我得到的信息是
未处理的异常:System.NullReferenceException:未将对象引用设置为 一个对象的实例。
答案 0 :(得分:1)
sLine = objReader.ReadLine();
您需要检查sLine是否为null,因为如果没有要读取的内容,ReadLine()将返回NULL。
答案 1 :(得分:1)
尝试在循环条件中添加!objReader.EndOfStream
while (sLine != null && !objReader.EndOfStream)
{
.
.
.
}
答案 2 :(得分:0)
您的循环不正确,因为sLine
在调用null
之前无法获得objReader.ReadLine()
值。相反,您应该将循环更改为以下内容:
using(StreamReader objReader = new StreamReader("file_location"))
{
do
{
sLine = objReader.ReadLine();
if(sLine != null)
//do stuff
}
while(!objReader.EndOfStream);
}
我不经常使用do..while循环,但在这种情况下,它可能是个好主意,因为你需要先调用ReadLine()来至少开始读取文件。这样,如果你在流的末尾,它将返回NULL并跳过你的if块然后中断,因为当它到达后置条件时它将在流的末尾。
另外,我知道这只是一个基本的例子,但请确保添加错误处理代码,因为大多数这些语句都会抛出异常。