c 根据字符串拆分字符串_字符串类拆分行为

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产品经理明智地希望允许用户指定多个定界符,因此他/她要求一种允许用户传递字符数组的重载方法。 在该方法内部,很可能像字符串数组一样处理要解析的字符串,以提高速度,并且进行了简单的比较。
要求还允许传入一个或多个字符的字符串。 我将其加粗,因为这就是MSDN文档中有关String Class Split方法的内容。 我认为实现该方法的人员认为这意味着他们应该将其与char数组一样对待,并使用字符串中的各个字符作为单独的分隔符。 我还认为他们搞砸了内部转换为char数组,并且只采用了字符串中的第一个字符。
</ speculation>

我认为这很遗憾,因为用单个字符分隔文本的时代是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 根据字符串拆分字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值