You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:39:06