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

时间:2011-09-19 14:11:43

标签: .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|")

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

result(0)是“foo | bar | bar | bar-foo |”

结果(1)是“ezrezertr | ghghhjhj |”

result(2)是“foo | xxx |”

我很高兴!

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

result(0)是“b | foo | bar | bar | bar-foo |”

结果(1)是“b | ezrezertr | ghghhjhj |”

结果(2)是“b | foo | xxx |”

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

2 个答案:

答案 0 :(得分: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()没有额外的参数(SplitOptions)......

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

答案 1 :(得分:2)

如果输入字符串相同,那么我几乎可以保证Console应用程序和ASP.NET的split方法行为相同。

可能输出没有正确显示?