这是一个棘手的场景,我以前见过让人们绊倒,所以我认为比其他答案给出的解释更值得。在您的原始格式Split(testString,"10")(1).Split("20")(0)
中,您在不知不觉中使用了两个不同 Split
的功能。
第一种Split(testString,"10")
是使用Microsoft.VisualBasic.Strings.Split
函数,它接受字符串类型的参数。 http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.split(v=vs.110).aspx
第二个.Split("20")(0)
是 usingSystem.String.Split
方法,它没有带String
参数的重载。http://msdn.microsoft.com/en-us/library/System.String.Split(v=vs.110).aspx
所以发生的事情是:
Split(testString,"10")
使用Microsoft.VisualBasic.Strings.Split
,它返回 new String() {"123456789", "11121314151617181920"}
(1)
表示获取返回数组的第一个位置,即“11121314151617181920”
"11121314151617181920".Split("20")(0)
使用System.String.Split
, 并尝试在字符串分隔符“20”上拆分
- 注意:字符串“20”参数被隐式转换为字符“2”,因为 String.Split 的唯一单个参数重载具有
Public Function Split (ParamArray separator As Char()) As String()
. ParamArray 参数选项允许您将逗号分隔的值列表传递到函数中,类似于 String.Format 如何使用动态替换值#。 http://msdn.microsoft.com/en-us/library/538f81ec.aspx
- 第 3 步代码变为
"11121314151617181920".Split(new Char() {CChar("20")})(0)
,使用文字值是"11121314151617181920".Split(new Char() {"2"c})(0)
。结果是 {"111", "13141516171819", "0"}。获取第 0 个位置,返回“111”。
因此,为避免混淆,您应该将代码转换为在两侧使用相同版本的 Split。
以下两个示例中的任何一个都应该有效:
示例 1:使用Microsoft.VisualBasic.Strings.Split
:
Split( Split(testString,"10")(1), "20" )(0)
示例 2:使用System.String.Split
:
testString _
.Split(New String() {"10"}, StringSplitOptions.None)(1) _
.Split(New String() {"20"}, StringSplitOptions.None)(0)