我在使用.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函数只能删除分隔符字符串的第一个字符! 有人知道为什么吗?
答案 0 :(得分:5)
ASP.NET结果看起来像是使用Regex.Split
而不是String.Split
。字符串"ab|"
将被解释为“a”的正则表达式,后跟“b”或没有,因此只需“a”匹配。
后来: 第二理论 :
String.Split
的重载需要单个字符串参数。唯一的一个参数重载需要一个char
的数组。String.Splt(char())
将拆分传递的所有字符。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方法行为相同。
可能输出没有正确显示?