当分隔符是多个char时,为什么拆分似乎不能正常工作?

时间:2015-06-26 15:59:21

标签: vb.net split

我对vb.net很陌生,如果分隔符超过一个字符,我就不明白为什么分割的工作方式不同。

我在.net小提琴上试过这个,我对结果感到惊讶:

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

我的问题是: 为什么会这样? 有没有办法用多个字符的分隔符获取第二部分代码的结果?

2 个答案:

答案 0 :(得分:2)

您可以使用模式

尝试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

答案 1 :(得分:2)

.NET String.Split()方法接受两个参数:

  1. 您要拆分的字符串
  2. 字符列表,其中任何字符都将被识别为分隔符
  3. 所以,这行代码:

    c= Txt.Split("_|_")
    

    不会说"使用 | 作为分隔符"。相反,它说"使用_或|或_作为分隔符"。

    获取您正在寻找的行为的最直接方法是使用Microsoft.VisualBasic命名空间中的String类。这经常被嘲笑,但有些情况下它只是比相应的.NET类做得更好。

    因此,导入Microsoft.VisualBaisc命名空间,然后......

    c = Split(Txt,"_|_")