CSV/文本文件按位置配对重组时报数组索引越界错误如何解决
数组越界报错解决方法
报错
Index was outside the bounds of the array的核心原因是你操作数组时使用的索引超过了数组的实际长度,针对你的场景,绝大多数情况是拆分字符串得到的两个数组长度不匹配导致的。
触发问题的常见原因
- 你提供的两行内容末尾都带了
;,按;拆分字符串时会在最后多生成一个空字符串元素,比如第一行拆分后得到的数组是["11","12","13","14","15",""],长度为6,如果你按5个元素的逻辑循环取值,就会触发越界。 - 读取文件时读到了多余的空白行(比如文件末尾的空行),拆分后得到空数组,直接取值就会报错。
- 两行内容的实际元素数量不一致,取值时按更长的数组长度循环。
修复步骤
- 读取文件时先过滤空行,只保留有实际内容的行
- 拆分字符串时添加空值过滤逻辑,排除末尾分号产生的无效空元素
- 配对前先校验两个数组的长度是否一致,避免长度不匹配导致越界
参考实现代码
Python 示例
# 读取文件并过滤空行 with open("你的文件路径.txt", "r", encoding="utf-8") as f: lines = [line.strip() for line in f if line.strip()] # 拆分时过滤空元素 list1 = [item for item in lines[0].split(";") if item] list2 = [item for item in lines[1].split(";") if item] # 先校验长度再配对输出 if len(list1) != len(list2): print(f"元素数量不匹配:第一行{len(list1)}个,第二行{len(list2)}个") else: res = [f"{a}={b}" for a, b in zip(list1, list2)] print("、".join(res))
C# 示例
// 读取并过滤空行 var lines = File.ReadAllLines("你的文件路径.txt").Where(line => !string.IsNullOrWhiteSpace(line)).ToList(); // 拆分时直接移除空条目 var list1 = lines[0].Split(';', StringSplitOptions.RemoveEmptyEntries); var list2 = lines[1].Split(';', StringSplitOptions.RemoveEmptyEntries); if (list1.Length != list2.Length) { Console.WriteLine($"元素数量不匹配:第一行{list1.Length}个,第二行{list2.Length}个"); return; } var res = string.Join("、", list1.Zip(list2, (a, b) => $"{a}={b}")); Console.WriteLine(res);
内容的提问来源于stack exchange,提问作者HelpMe
相关产品推荐
相关产品推荐

