为什么当分隔符超过一个字符时拆分似乎无法正常工作?
Why split seems not to work properly when separator is more than one char?
我是 vb.net 的新手,我不明白为什么如果分隔符超过一个字符,拆分的工作方式会有所不同。
我已经在 .net 上试过了 fiddle 结果令我惊讶:
Dim Txt as string = "123_|_ABC_|_sd"
Dim c() as string
c= Txt.Split("_|_")
console.WriteLine(c.length)
For i = 0 to c.length -1
console.WriteLine(c(i))
Next
Txt = "123|ABC|sd"
c= Txt.Split("|")
console.WriteLine(c.length)
For i = 0 to c.length -1
console.WriteLine(c(i))
Next
第一部分代码的结果是:
5
123
|
ABC
|
sd
第二部分代码:
3
123
ABC
sd
我的问题是:
为什么会这样?
有没有办法用多个字符的分隔符来获取第二部分代码的结果?
您可以尝试使用 Regex.Split()
模式
"_\|_"
示例:
Imports System.Text.RegularExpressions
Module Module1
Sub Main()
Dim Txt As String = "123_|_ABC_|_sd"
Dim c() As String
c = Regex.Split(Txt, "_\|_")
For i = 0 To c.Length - 1
Console.WriteLine(c(i))
Next
Console.ReadLine()
End Sub
End Module
结果:
123
ABC
sd
.NET String.Split() 方法接受两个参数:
- 你要拆分的字符串
- 一个字符列表,其中任何字符都将被识别为分隔符
所以,这行代码:
c= Txt.Split("_|_")
没说 "use | as a delimter"。相反,它说 "use _ or | or _ as a delimiter".
获得所需行为的最直接方法是使用 Microsoft.VisualBasic 命名空间中的字符串 class。这经常被嘲笑,但在某些情况下,它比相应的 .NET classes.
做得更好
所以,导入 Microsoft.VisualBaisc 命名空间,然后...
c = Split(Txt,"_|_")
我是 vb.net 的新手,我不明白为什么如果分隔符超过一个字符,拆分的工作方式会有所不同。
我已经在 .net 上试过了 fiddle 结果令我惊讶:
Dim Txt as string = "123_|_ABC_|_sd"
Dim c() as string
c= Txt.Split("_|_")
console.WriteLine(c.length)
For i = 0 to c.length -1
console.WriteLine(c(i))
Next
Txt = "123|ABC|sd"
c= Txt.Split("|")
console.WriteLine(c.length)
For i = 0 to c.length -1
console.WriteLine(c(i))
Next
第一部分代码的结果是:
5
123
|
ABC
|
sd
第二部分代码:
3
123
ABC
sd
我的问题是: 为什么会这样? 有没有办法用多个字符的分隔符来获取第二部分代码的结果?
您可以尝试使用 Regex.Split()
模式
"_\|_"
示例:
Imports System.Text.RegularExpressions
Module Module1
Sub Main()
Dim Txt As String = "123_|_ABC_|_sd"
Dim c() As String
c = Regex.Split(Txt, "_\|_")
For i = 0 To c.Length - 1
Console.WriteLine(c(i))
Next
Console.ReadLine()
End Sub
End Module
结果:
123
ABC
sd
.NET String.Split() 方法接受两个参数:
- 你要拆分的字符串
- 一个字符列表,其中任何字符都将被识别为分隔符
所以,这行代码:
c= Txt.Split("_|_")
没说 "use | as a delimter"。相反,它说 "use _ or | or _ as a delimiter".
获得所需行为的最直接方法是使用 Microsoft.VisualBasic 命名空间中的字符串 class。这经常被嘲笑,但在某些情况下,它比相应的 .NET classes.
做得更好所以,导入 Microsoft.VisualBaisc 命名空间,然后...
c = Split(Txt,"_|_")