将字符串拆分并赋值给变量

3
我正在尝试拆分一个字符串并将其拆分部分赋值给变量。第一个变量可以正常工作,但我无法使第二个变量正常工作。
For Each columnQuarter As DataColumn In dt.Columns
            Dim s As String = columnQuarter.ColumnName
            Dim words As String() = s.Split("-")
            Dim Year As String = words(0)
            Dim Quarter As String = words(1)
            Debug.WriteLine(Year)
            Debug.WriteLine(Quarter)

在“Dim Quarter As String = words(1)”这一行,我收到了错误代码“IndexOutofRangeException was unhandled. Index was outside the bounds of the array.”。

ColumnName的一个例子是2012-Q1。

附加信息:

这是我用来将列添加到dataTable的代码。您可以看到我的前两列不包含“-”。

tickerColumn = New DataColumn("Ticker", Type.GetType("System.String"))
consistencyColumn = New DataColumn("Consistency", Type.GetType("System.Int32"))
dt.Columns.Add(tickerColumn)
dt.Columns.Add(consistencyColumn)

    With Me
        lr = Now.Year - 1901
        For i = 1 To lr
            column = New DataColumn
            column.DataType = System.Type.GetType("System.Int32")
            column.ColumnName = Now.Year - i & "-Q4"
            dt.Columns.Add(column)

            column = New DataColumn
            column.DataType = System.Type.GetType("System.Int32")
            column.ColumnName = Now.Year - i & "-Q3"
            dt.Columns.Add(column)

            column = New DataColumn
            column.DataType = System.Type.GetType("System.Int32")
            column.ColumnName = Now.Year - i & "-Q2"
            dt.Columns.Add(column)

            column = New DataColumn
            column.DataType = System.Type.GetType("System.Int32")
            column.ColumnName = Now.Year - i & "-Q1"
            dt.Columns.Add(column)
        Next i
    End With

2
调用Split("-")后单词的长度是多少?并且words(0)的值是什么? - openshac
1
你是否验证了你的 DataTable 中所有列都有连字符?那个异常意味着在分割数组中没有第二个元素。 - Chris Dunaway
1
请问你所命名为“words”的字符串数组长度是多少?即,使用Debug.WriteLine(words.Length)会输出什么? - openshac
1
你的代码运行良好。确保值确实是“2012-Q1”格式。如果格式看起来没问题,那么字符串中的破折号可能不是标准破折号... - Meta-Knight
1
您有两列,分别称为“股票”和“一致性”。它们没有任何连字符,并且可能会导致异常。请参见下面的LarsTech答案。 - Chris Dunaway
显示剩余5条评论
1个回答

3

由于你的前两列没有破折号,请尝试将它们过滤掉:

For Each columnQuarter As DataColumn In dt.Columns
  Dim s As String = columnQuarter.ColumnName
    If s.Contains("-") Then
      Dim words As String() = s.Split("-")
      Dim Year As String = words(0)
      Dim Quarter As String = words(1)
      Debug.WriteLine(Year)
      Debug.WriteLine(Quarter)
    End If
Next

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接