.NET字符串拆分方法奇怪的行为

Did*_*evy 2 .net string split

使用.NET 3.5我遇到了string.split的问题:

要拆分的字符串是:

dim source as string = "ab|foo|bar|bar|bar-foo|ab|ezrezertr|ghghhjhj|ab|foo|xxx|"
dim result() as string = source.split("ab|")
Run Code Online (Sandbox Code Playgroud)

在Winforms应用程序中使用时,结果为"正确":

结果(0)是"foo | bar | bar | bar-foo |"

结果(1)是"ezrezertr | ghghhjhj |"

结果(2)是"foo | xxx |"

而且我很开心!

在后面的ASP.NET代码中使用时,结果是:

结果(0)是"b | foo | bar | bar | bar-foo |"

结果(1)是"b | ezrezertr | ghghhjhj |"

结果(2)是"b | foo | xxx |"

换句话说,split函数只能删除分隔符字符串的第一个字符!有人知道为什么吗?

Ric*_*ard 5

ASP.NET结果看起来像你正在使用Regex.Split而不是String.Split.该字符串"ab|"将被解释为"a"的正则表达式,后跟"b"或没有,所以只是"a"匹配.


后来:第二理论:

  • 没有重载String.Split需要单个字符串参数.唯一的一个参数重载需要一个数组char.
  • String.Splt(char())将拆分任何传递的字符.
  • VB,不会Option Strict On将字符串隐式转换为字符数组.

因此,我认为在ASP.NET案例中你没有option strict on,因此theString.Split(anotherString)被视为theString.Split(anotherString.ToCharArray()).

因此分裂只是一个"b".

然而,这留下了第一种情况如何作为传递字符串的问题,但是没有超载String()而没有额外的参数(a SplitOptions)......

简介:Visual Basic在文件/项目/语言级别设置的额外隐式转换和行为可以使相同的代码行为不同.