我遇到了一个关于 indexOutOfBounds 异常的奇怪问题。我需要读取数组中每个字符串的第一个字符。我在第 5 行 (linesRead[i][0]) 中遇到异常。对我来说最奇怪的部分是,当我尝试添加用于调试 Console.WriteLine(linesRead[0][0]) / Console.WriteLine(linesRead[linesRead.Length-1][0]) 的行时,它工作得很好。string[] linesRead = System.IO.File.ReadAllLines(@"test.txt"); //Just a bunch of linesfor (int i = 0; i < linesRead.Length; i++){ if (linesRead[i][0] == '5') { //Do stuff }}The text inside of test.txt:5|f-----g-----c---g-----a---|6|--c-----------------------|5|---Aa-f-----g-----c-------|5|------ccdf-ff-----g-----c-|6|--------------c-----------|5|--g-----a------Aa-f-----g-|5|----c-------------ccdf-f--|
4 回答
aluckdog
TA贡献1847条经验 获得超7个赞
if (linesRead[i][0] == '5')
如果行为空,将触发此错误。
尝试
if (linesRead[i].StartsWith("5"))
反而。
叮当猫咪
TA贡献1776条经验 获得超12个赞
我会空/空检查每一行,以防万一。
var linesRead = System.IO.File.ReadAllLines(@"test.txt"); //Just a bunch of lines
foreach (var line in linesRead)
{
if (!string.IsNullOrEmpty(line) && line[0] == '5')
{
//Do stuff
}
}
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
如果您有一个空字符串,则该字符linesRead[i][0]
是'\0'
(用于标记字符串的结尾)。
如果将第 5 行更改为,if(linesRead[i].Length > 0 && linesRead[i][0] == '5'))
则可以跳过空字符串情况。
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
这意味着您的文件中某处有一个空行。
您可以使用以下命令跳过这些行:
if (linesRead[i].Length > 0 && linesRead[i][0] == '5')
- 4 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消