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