1

在对字符串进行多次拆分时,我得到了奇怪的结果,所以我决定做一个简单的测试来弄清楚发生了什么

测试字符串“1234567891011121314151617181920”

如果我想在 Javascript 中获得 10 到 20 之间的内容,我会这样做:

var results = testString.split("10")[1].split("20")[0]

这将返回111213141516171819

但是,当我在 VB 中执行此操作时,我得到111

Split(testString,"10")(1).Split("20")(0)

无论我放什么,似乎第二次拆分都只能识别第一个字符。

因此,当它在字符串中找到下一个“2”时它会停止,即使该字符串甚至不存在,即使“2abc”也会产生相同的结果。

4

4 回答 4

2

String.Split 没有只接受 String 的重载。参数是 Char 数组或 String 数组。您的字符串可能正在转换为 char 数组。像这样显式传递一个字符串数组:

testString.Split(New String() { "10" }, StringSplitOptions.None)

于 2012-05-05T01:44:40.687 回答
1

Vb 仅将分隔符参数视为单个字符。

于 2012-05-05T01:45:06.370 回答
1

尝试包装第二个拆分,使其像第一个拆分一样,即:

Split( Split(testString,"10")(1), "20" )(0)"
于 2012-05-05T14:12:01.683 回答
1

这是一个棘手的场景,我以前见过让人们绊倒,所以我认为比其他答案给出的解释更值得。在您的原始格式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

所以发生的事情是:

  1. Split(testString,"10")使用Microsoft.VisualBasic.Strings.Split,它返回 new String() {"123456789", "11121314151617181920"}
  2. (1)表示获取返回数组的第一个位置,即“11121314151617181920”
  3. "11121314151617181920".Split("20")(0)使用System.String.Split, 并尝试在字符串分隔符“20”上拆分
  4. 注意:字符串“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
  5. 第 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)
于 2014-08-20T15:31:41.533 回答