VB.net使用Regex.Split处理文本文件出现Index out of bounds错误求助
问题原因
- 过滤逻辑顺序错误:当前代码先对行做拆分,再判断是否为注释行/空行,无意义且容易触发异常
- 空白行过滤不完整:仅用
line.Length = 0过滤空行,但STORAGE6后的行是全空格的空白行,长度不为0不会被过滤,这类行拆分后数组长度不足3,访问arrWords(2)就会触发索引越界 - 拆分逻辑存在隐患:
Regex.Split处理开头带空格的行时,会返回首元素为空字符串的数组,会导致列索引错位,同时你没有提前判断有效列数是否足够,格式异常的行也会触发报错
修正方案
修正后的代码如下,已优化逻辑避免上述问题:
Public Function Testing() ' 先判断用户是否选择了文件,避免点取消后报错 If OpenFileDialog1.ShowDialog() <> DialogResult.OK Then Exit Function Dim file = System.IO.File.ReadAllLines(OpenFileDialog1.FileName) For Each line In file ' 第一步:先过滤全空白行 Dim trimedLine = line.Trim() If trimedLine.Length = 0 Then Continue For ' 第二步:过滤包含#的注释行 If trimedLine.Contains("#") Then Continue For ' 第三步:拆分,自动移除所有空元素,同时兼容空格、制表符分隔,比正则拆分更高效 Dim arrWords() As String = line.Split({" "c, vbTab}, StringSplitOptions.RemoveEmptyEntries) ' 第四步:先判断列数足够再取值,避免特殊格式行报错 If arrWords.Length >= 3 Then Console.WriteLine(arrWords(0) & " " & arrWords(2)) End If Next End Function
内容的提问来源于stack exchange,提问作者PJHytfihS
相关产品推荐
相关产品推荐

