VB.Net中的子串方法
我有文本框行:VB.Net中的子串方法,vb.net,Vb.net,我有文本框行: { LstScan = 1,100, DrwR2 = 0000000043 } { LstScan = 2,200, DrwR2 = 0000000041 } { LstScan = 3,300, DrwR2 = 0000000037 } 我应该展示: 1,100 2,200 3,300 这是一个我不能带到工作阶段的代码 Dim data As String = TextBox1.Lines(0) ' Part 1: get the index of a separ
{ LstScan = 1,100, DrwR2 = 0000000043 }
{ LstScan = 2,200, DrwR2 = 0000000041 }
{ LstScan = 3,300, DrwR2 = 0000000037 }
我应该展示:
1,100
2,200
3,300
这是一个我不能带到工作阶段的代码
Dim data As String = TextBox1.Lines(0)
' Part 1: get the index of a separator with IndexOf.
Dim separator As String = "{ LstScan ="
Dim separatorIndex = data.IndexOf(separator)
' Part 2: see if separator exists.
' ... Get the following part with Substring.
If separatorIndex >= 0 Then
Dim value As String = data.Substring(separatorIndex + separator.Length)
TextBox2.AppendText(vbCrLf & value)
End If
显示如下:
1,100, DrwR2 = 0000000043 }
您的问题是您正在使用从开始索引到字符串结尾的子字符串版本:
"hello world".Substring(3) 'take from 4th character to end of string
lo世界
使用另一个数字作为要剪切长度的子字符串版本:
"hello world".Substring(3, 5) 'take 5 chars starting from 4th char
洛沃
如果字符串长度不同,需要提取,则必须运行另一个搜索(例如,搜索第一次出现的,
,在起始字符之后,并从新找到的索引中减去起始索引)
事实上,我可能会使用Split,因为它干净易读:
Dim data As String = TextBox1.Lines(0)
Dim arr = data.Split()
Dim thing = arr(3)
thing
现在包含1100,
,您可以使用TrimEnd(“,”c)
删除最后一个逗号
thing = thing.TrimEnd(","c)
您可以将其缩减为一行:
TextBox1.Lines(0).Split()(3).TrimEnd(","c)
您的问题是您正在使用从开始索引到字符串结尾的子字符串版本:
"hello world".Substring(3) 'take from 4th character to end of string
lo世界
使用另一个数字作为要剪切长度的子字符串版本:
"hello world".Substring(3, 5) 'take 5 chars starting from 4th char
洛沃
如果字符串长度不同,需要提取,则必须运行另一个搜索(例如,搜索第一次出现的,
,在起始字符之后,并从新找到的索引中减去起始索引)
事实上,我可能会使用Split,因为它干净易读:
Dim data As String = TextBox1.Lines(0)
Dim arr = data.Split()
Dim thing = arr(3)
thing
现在包含1100,
,您可以使用TrimEnd(“,”c)
删除最后一个逗号
thing = thing.TrimEnd(","c)
您可以将其缩减为一行:
TextBox1.Lines(0).Split()(3).TrimEnd(","c)
这应该起作用:
Function ParseLine(input As String) As String
Const startKey As String = "LstScan = "
Const stopKey As String = ", "
Dim startIndex As String = input.IndexOf(startKey)
Dim length As String = input.IndexOf(stopKey) - startIndex
Return input.SubString(startIndex, length)
End Function
TextBox2.Text = String.Join(vbCrLf, TextBox1.Lines.Select(AddressOf ParseLine))
如果我愿意,我可以把整件事变成一条(杂乱的)线。。。但这更具可读性。如果我不确信文本框中的每一行都会匹配该格式,我还可以在Select()
之前插入Where()
,这样应该可以:
Function ParseLine(input As String) As String
Const startKey As String = "LstScan = "
Const stopKey As String = ", "
Dim startIndex As String = input.IndexOf(startKey)
Dim length As String = input.IndexOf(stopKey) - startIndex
Return input.SubString(startIndex, length)
End Function
TextBox2.Text = String.Join(vbCrLf, TextBox1.Lines.Select(AddressOf ParseLine))
如果我愿意,我可以把整件事变成一条(杂乱的)线。。。但这更具可读性。如果我不确定文本框中的每一行都会匹配该格式,我还可以在
Select()
子字符串重载指定长度之前插入Where()
。如果这种模式一直存在,您可以执行data.Substring(separatorIndex+separator.Length,5),您最好使用一个内置的JSON解析器。Substring在指定长度的地方有一个重载。如果这种模式一直存在,那么您可以使用data.Substring(separatorIndex+separator.Length,5)执行操作,使用内置的JSON解析器可能会更好。