c 根据字符串拆分字符串
对于那些从VB6毕业到VB.NET的人; 毫无疑问,您遇到的一件事就是,您期望与VB6相同或相似的功能在VB.NET中是完全不同的。 我最近遇到的一种方法是String Class Split方法。
在VB6中,Split是一个功能:
Dim MySplittableString as String
MySplittableString = "one,two,three,four,five"
Dim MyArray() as String
MyArray = Split(MySplittableString, ",")
在VB6中,上面的代码将为您提供5个元素的数组。
MyArray(0)=“一个”
MyArray(1)=“两个”
...
同样,在VB6中,您可以指定一个比一个字符长的字符串,用它来分割定界的字符串。
Dim MySplittableString as String
MySplittableString = "one<split>two<split>three<split>four<split>five"
Dim MyArray() as String
MyArray = Split(MySplittableString, "<split>")
在VB6中,这同样有效。
在VB.NET字符串类中输入Split方法。 您可能希望它也能类似地工作,
但事实并非如此 。在下面的代码中...
Dim MySplittableString as String = "one<split>two<split>three<split>four<split>five"
Dim MyArray() as String = MySplittableString.Split"<split>")
... split方法会忽略除第一个字符以外的所有字符-它用作唯一的定界符。
因此,在上面的代码中,您将获得:
MyArray(0)=“”
MyArray(1)=拆分>一个
MyArray(2)=拆分>两个
...
真是一团糟...在VB.NET中,您可以将split方法传递给字符串,但是
忽略除第一个字符外的所有字符。 您可以传入chars()数组,它将使用它们中的每个作为单独的定界符。 如果您需要拆分使用多个定界符的字符串,那将很方便。 不幸的是,您不能使用VB.NET中的字符串类拆分方法来执行VB6中的Split函数之类的操作。但是,您可以恢复到经典VB兼容性拆分功能-但是,当我们扩展规范的.NET知识库时,我们中的某些人希望避免这种情况。
就个人而言-我认为MS搞砸了。
<推测>
VB.NET产品经理明智地希望允许用户指定多个定界符,因此他/她要求一种允许用户传递字符数组的重载方法。 在该方法内部,很可能像字符串数组一样处理要解析的字符串,以提高速度,并且进行了简单的比较。</ speculation>
要求还允许传入一个或多个字符的字符串。 我将其加粗,因为这就是MSDN文档中有关String Class Split方法的内容。 我认为实现该方法的人员认为这意味着他们应该将其与char数组一样对待,并使用字符串中的各个字符作为单独的分隔符。 我还认为他们搞砸了内部转换为char数组,并且只采用了字符串中的第一个字符。
我认为这很遗憾,因为用单个字符分隔文本的时代是1980年代的做法。 我本来希望String.Split方法的实现可以识别出一组最新的要求。 我认为MS应该解决此问题。 它们不会破坏任何东西(或破坏很多东西)-主要是因为我认为没有人使用String.Split方法(字符串长度大于1),因为它仍然无法工作。
解决方法!这就是我的工作。
Dim DelimiterSet() As Char = {"|"c, "~"c, "`"c, "└"c, "■"c}
Dim Delimiter(0) As Char
Dim I As Integer = 0
For I = 0 To 4
If MySplittableString.Contains(DelimiterSet(I)) = False Then
Delimiter(0) = DelimiterSet(I)
Exit For
End If
Next
Dim MyArray() As String = MySplittableString.Replace("<split>", Delimiter(0).ToString).Split(Delimiter, StringSplitOptions.RemoveEmptyEntries)
上面的代码首先检查需要拆分的字符串是否存在单个字符。
如今,单个字符定界是有风险的-因此,找到不在您要分割的字符串中的唯一字符很重要。
上面的代码循环使用了5个可能的字符-如果需要,可以扩展该字符。
当找到一个不存在的字符串时,它将使用唯一的单个字符替换字符串(在我的示例中为“ <split>”)。
然后,它将使用String.Split方法返回一个数组。
这是很多代码-但是它确实避免了旧的VB6代码,并且似乎性能较高。 可能会有更快的方法-但我的要求很简单。
德斯
翻译自: https://bytes.com/topic/visual-basic-net/insights/889922-string-class-split-behavior
c 根据字符串拆分字符串