获取“索引超出数组范围”异常
Posted
技术标签:
【中文标题】获取“索引超出数组范围”异常【英文标题】:Getting "Index was outside the bounds of the array" exception 【发布时间】:2012-02-25 08:31:20 【问题描述】:我们有一个包含两列“word”和“binary”的数据表“st”
void replace()
string s1="", s2="";
StreamReader streamReader;
streamReader = File.OpenText("C:\\text.txt");
StreamWriter streamWriter = File.CreateText("C:\\sample1.txt");
int x = st.Rows.Count;
// int i1 = 0;
// Now, read the entire file into a string
while ((line = streamReader.ReadLine()) != null)
for (int i = 0; i < x; i++)
s1 = Convert.ToString(st.Rows[i]["Word"]);
s2 = Convert.ToString(st.Rows[i]["Binary"]);
s2+="000";
char[] delimiterChars = ' ', '\t' ;
String[] words = line.Split(delimiterChars);
// Write the modification into the same file
String ab = words[i]; //exception occurs here
// Console.WriteLine(ab);
streamWriter.Write(ab.Replace(s1,s2));
streamReader.Close();
streamWriter.Close();
我们收到“索引超出数组范围”异常。我们无法找到问题所在。提前致谢
编辑: tnx 给所有帮助过的人。 我这样做了,它以某种方式起作用:
void replace()
string s1 = "", s2 = "";
StreamReader streamReader;
streamReader = File.OpenText("C:\\sample1.txt");
StreamWriter streamWriter = File.CreateText("C:\\sample1.txt");
int x = st.Rows.Count;
while ((line = streamReader.ReadLine()) != null)
char[] delimiterChars = ' ', '\t' ;
String[] words = line.Split(delimiterChars);
foreach (string str in words)
s1 = str;
DataRow drow = st.Rows.Find(str);
if (drow != null)
index = st.Rows.IndexOf(drow);
s2 = Convert.ToString(st.Rows[index]["Binary"]);
// s2 += "000";
// ab = words[i];
Console.WriteLine(s1);
Console.WriteLine(s2);
streamWriter.Write(str.Replace(s1, s2));
else
break;
streamReader.Close();
streamWriter.Close();
tnx 再次给大家。 问候, 萨格尔
【问题讨论】:
【参考方案1】:您基于 i 的方式是行数,即 X,而不是字符串数组的长度。因此,您可能有 100 行,但字符串仅拆分为 5 个字符串值。
【讨论】:
【参考方案2】:i
是您所在行的索引。
while ((line = streamReader.ReadLine()) != null)
for (int i = 0; i < x; i++) // say we are on line 20
words
包含该行的单词数组。
String[] words = line.Split(delimiterChars); // say there are 3 words on line 20
如果该行中的单词少于行索引...您会得到一个超出范围的异常。
String ab = words[i]; // trying to get to word 20 out of 3...
您需要为该行中的字数使用有效的索引值 - 不清楚您在代码中究竟想要实现什么,所以我无法提供示例。
【讨论】:
【参考方案3】:如果您有一个假设行“a b c d e”,例如文件中的第一行,并且您的数据库“st”包含 10 行,则您将循环执行该过程 10 次,在第 6 次遇到错误时。第 6 步会将字符串拆分为:a, b, c, d, e,然后尝试获取数组外部的第 5 个索引(从零开始)。
【讨论】:
那我该如何避免呢?请帮助 @vidya 如果我从示例中了解您的应用程序,您正在寻找要在字符串中替换的单词,然后将修改后的字符串放回文件中。首先,我会尽可能地将所有步骤提升到内部循环之外,拆分字符串和分隔符可以在 for 循环之外完成。然后在 for 循环中,您实际上想要查看要替换的拆分字符串中的每个单词。这样做的一种方法是添加一个迭代每个拆分词的 for 循环。更简单直接的方法是使用 List使用调试器查看line
和words
数组中的内容,并将其与i
的值进行比较。调试器是你最好的朋友。
【讨论】:
以上是关于获取“索引超出数组范围”异常的主要内容,如果未能解决你的问题,请参考以下文章
如何修复此 System.IndexOutOfRangeException:索引超出数组范围