【问题标题】:How to split string in group in vb.net如何在 vb.net 中分组拆分字符串
【发布时间】:2011-02-06 00:06:15
【问题描述】:

我是 amol kadam,我想知道如何将字符串分成两部分。我的字符串是时间格式 (12:12)。& 我想以小时和分钟格式分隔它。所有变量的数据类型是字符串。小时变量使用 strTimeHr 和分钟 strTimeMin 。我尝试了下面的代码,但它们是一个例外“索引和长度必须引用字符串中的位置。 参数名称:长度”

                If Not (objDS.Tables(0).Rows(0)("TimeOfAccident") Is Nothing Or objDS.Tables(0).Rows(0)("TimeOfAccident") Is System.DBNull.Value) Then
                    strTime = objDS.Tables(0).Rows(0)("TimeOfAccident") 'strTime taking value 12:12
                    index = strTime.IndexOf(":")                        'index taking value 2  
                    lastIndex = strTime.Length                          'Lastindex taking value 5   

                    strTimeHr = strTime.Substring(0, index)               'strTime taking value 12 correctly
     strTimeMin = strTime.Substring(index + 1, lastIndex)   'BUT HERE IS PROBLEM OCCURE strTimeMin Doesn't taking any value
                    Me.NumUpDwHr.Text = strTimeHr
                    Me.NumUpDwMin.Text = strTimeMin
                End If

【问题讨论】:

  • “TimeOfAccident”列的数据类型是什么?

标签: vb.net split substring


【解决方案1】:

最简单的方法(假设您可以确保格式)是使用拆分:

dim strTime as string = objDs.Tables(0).Rows(0).("TimeOfAccident")
dim timeParts() as string =  split(strTime,":")
dim strTimeHr as string = timeParts(0)
dim strTimeMn  as string = timePartS(1)

您还需要一些错误处理来检查格式,并且拆分生成的数组至少包含两个元素,什么不是。

编辑:在仔细查看您的代码后,我发现了您的错误的原因。

你有这个代码:

lastIndex = strTime.Length 
strTimeHr = strTime.Substring(0, index)
strTimeMin = strTime.Substring(index + 1, lastIndex)

最后一行给出了错误。

您收到该错误的原因是 VB.Net 中的字符串(和其他数组)是从零开始的。这就是为什么在 strTimeHr 字段中,您从位置 0 开始。长度为您提供计数,因为数组是从零开始的,这意味着计数将比可用索引多 1。

即从零开始的数组中的最后一个元素是数组的长度减 1。

因此,将您的原始代码更改为:

lastIndex = strTime.Length  - 1
strTimeHr = strTime.Substring(0, index)
strTimeMin = strTime.Substring(index + 1, lastIndex)

也可以。

【讨论】:

    【解决方案2】:

    “TimeOfAccident”列的数据类型是DateTime吗?如果是这样,那么最简单的解决方案是:

    'Using LINQ to convert the value to a nullable datetime.
    Dim timeOfAccident As Nullable(Of DateTime) = dt.Rows(0).Field(Of Nullable(Of DateTime))("TimeOfAccident")
    
    If timeOfAccident.HasValue Then
        Me.NumUpDwHr.Text = timeOfAccident.Hour
        Me.NumUpDwMin.Text = timeOfAccident.Minute
    End If
    

    如果“TimeOfAccident”列是一个字符串,那么你可以这样做:

    Dim timeOfAccidentString As String = dt.Rows(0).Field(String)("TimeOfAccident")
    
    If Not String.IsNullOrEmpty(timeOfAccidentString) Then
        Dim accidentTime As DateTime = DateTime.Parse(timeOfAccidentString)
        Me.NumUpDwHr.Text = timeOfAccident.Hour
        Me.NumUpDwMin.Text = timeOfAccident.Minute
    End If
    

    【讨论】:

      【解决方案3】:
      string s = "12:13";
      DateTime dt = DateTime.Parse(s);
      
      Console.Write(dt.Hour + " " + dt.Minute);
      

      【讨论】:

        【解决方案4】:

        尝试类似 (String.Split Method )

        Dim str As String = "12:13"
        Dim strHr = str.Split(":")(0)
        Dim strMin = str.Split(":")(1)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多