Vb.net 需要帮助在VB中拆分字符串吗

Vb.net 需要帮助在VB中拆分字符串吗,vb.net,string,Vb.net,String,我有一个由服务器返回的字符串,我需要从中获取一些信息。这是字符串: (股票信息(信息编号57)(回复4)(参考“IC00000000234”标准)(总计(第61栏))(有效(第61栏))) 我需要获得框的总数和有效框,并将它们放入参数中。我尝试过使用子字符串并将字符串分割成不同的部分,问题是这个字符串可能有不同的长度,所以它不会总是返回正确的结果。任何帮助都将不胜感激 谢谢有很多方法可以解决您的问题: Dim MyString As String = "(stock-info (

我有一个由服务器返回的字符串,我需要从中获取一些信息。这是字符串:

(股票信息(信息编号57)(回复4)(参考“IC00000000234”标准)(总计(第61栏))(有效(第61栏)))

我需要获得框的总数和有效框,并将它们放入参数中。我尝试过使用子字符串并将字符串分割成不同的部分,问题是这个字符串可能有不同的长度,所以它不会总是返回正确的结果。任何帮助都将不胜感激


谢谢

有很多方法可以解决您的问题:

        Dim MyString As String = "(stock-info (msg-id 57) (reply-to 4) (ref ""IC00000000234"" std) (total (boxes 61)) (valid (boxes 61)) )"
    Dim SringExtracted As String = ""
    Dim MyKey As String = ""

    'Total Boxes
    MyKey = "(total (boxes"
    SringExtracted = MyString.Substring(MyString.LastIndexOf(MyKey) + MyKey.Length)
    SringExtracted = Microsoft.VisualBasic.Left(SringExtracted, SringExtracted.IndexOf("))"))
    Dim TotalBoxes As Integer = Val(SringExtracted)

    'Valid Boxes
    MyKey = "valid (boxes"
    SringExtracted = MyString.Substring(MyString.LastIndexOf(MyKey) + MyKey.Length)
    SringExtracted = Microsoft.VisualBasic.Left(SringExtracted, SringExtracted.IndexOf("))"))
    Dim ValidBoxes As Integer = Val(SringExtracted)

有很多方法可以解决您的问题:

        Dim MyString As String = "(stock-info (msg-id 57) (reply-to 4) (ref ""IC00000000234"" std) (total (boxes 61)) (valid (boxes 61)) )"
    Dim SringExtracted As String = ""
    Dim MyKey As String = ""

    'Total Boxes
    MyKey = "(total (boxes"
    SringExtracted = MyString.Substring(MyString.LastIndexOf(MyKey) + MyKey.Length)
    SringExtracted = Microsoft.VisualBasic.Left(SringExtracted, SringExtracted.IndexOf("))"))
    Dim TotalBoxes As Integer = Val(SringExtracted)

    'Valid Boxes
    MyKey = "valid (boxes"
    SringExtracted = MyString.Substring(MyString.LastIndexOf(MyKey) + MyKey.Length)
    SringExtracted = Microsoft.VisualBasic.Left(SringExtracted, SringExtracted.IndexOf("))"))
    Dim ValidBoxes As Integer = Val(SringExtracted)

这应该行得通。按“框”拆分字符串,忽略字符串的第一部分,然后在将其余两个字符串转换回字符串之前,将其余两个字符串(以字符数组形式)的所有非数字字符去掉。如果您想将它们作为整数,只需在之后解析它们

Dim myString = "(stock-info (msg-id 57) (reply-to 4) (ref 'IC00000000234' std) (total (boxes 61)) (valid (boxes 61)) )"

Dim splitArray = myString.Split("boxes ").Skip(1)

Dim totalBoxesAsString = New String(splitArray.First.Where(Function(c) Char.IsDigit(c)).ToArray())
Dim validBoxesAsString = New String(splitArray.Last.Where(Function(c) Char.IsDigit(c)).ToArray())

这应该行得通。按“框”拆分字符串,忽略字符串的第一部分,然后在将其余两个字符串转换回字符串之前,将其余两个字符串(以字符数组形式)的所有非数字字符去掉。如果您想将它们作为整数,只需在之后解析它们

Dim myString = "(stock-info (msg-id 57) (reply-to 4) (ref 'IC00000000234' std) (total (boxes 61)) (valid (boxes 61)) )"

Dim splitArray = myString.Split("boxes ").Skip(1)

Dim totalBoxesAsString = New String(splitArray.First.Where(Function(c) Char.IsDigit(c)).ToArray())
Dim validBoxesAsString = New String(splitArray.Last.Where(Function(c) Char.IsDigit(c)).ToArray())

这类问题中正则表达式可能很有用:

Option Infer On
Option Strict On

Imports System.Text.RegularExpressions

Module Module1

    Sub Main()

        Dim s = "(stock-info (msg-id 57) (reply-to 4) (ref ""IC00000000234"" std) (total (boxes 61)) (valid (boxes 48)) )"

        Dim reTotal As New Regex("total \(boxes ([0-9]+)")
        Dim reValids As New Regex("valid \(boxes ([0-9]+)")

        ' initialise with a value than cannot appear in the string
        ' so it can be checked for later if needed
        Dim totalBoxes As Integer = -1
        Dim validBoxes As Integer = -1

        If reTotal.IsMatch(s) Then
            totalBoxes = CInt(reTotal.Match(s).Groups(1).Value)
        End If

        If reValids.IsMatch(s) Then
            validBoxes = CInt(reValids.Match(s).Groups(1).Value)
        End If

        Console.WriteLine($"Total: {totalBoxes} Valid: {validBoxes}")
        Console.ReadLine()

    End Sub

End Module
产出:

总数:61有效期:48


这类问题中正则表达式可能很有用:

Option Infer On
Option Strict On

Imports System.Text.RegularExpressions

Module Module1

    Sub Main()

        Dim s = "(stock-info (msg-id 57) (reply-to 4) (ref ""IC00000000234"" std) (total (boxes 61)) (valid (boxes 48)) )"

        Dim reTotal As New Regex("total \(boxes ([0-9]+)")
        Dim reValids As New Regex("valid \(boxes ([0-9]+)")

        ' initialise with a value than cannot appear in the string
        ' so it can be checked for later if needed
        Dim totalBoxes As Integer = -1
        Dim validBoxes As Integer = -1

        If reTotal.IsMatch(s) Then
            totalBoxes = CInt(reTotal.Match(s).Groups(1).Value)
        End If

        If reValids.IsMatch(s) Then
            validBoxes = CInt(reValids.Match(s).Groups(1).Value)
        End If

        Console.WriteLine($"Total: {totalBoxes} Valid: {validBoxes}")
        Console.ReadLine()

    End Sub

End Module
产出:

总数:61有效期:48


在这种情况下,可以使用正则表达式。


在这种情况下,可以使用正则表达式。


非常感谢你。我现在明白为什么我不能让它工作了。非常感谢你。我现在明白为什么我不能让它工作了。