当对字符串进行多次拆分时,我得到了奇怪的结果,所以我决定做一个简单的测试来弄清楚发生了什么
testString“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”也会有相同的结果,即使该字符串甚至不存在。
答案 0 :(得分:2)
String.Split没有只接受String的重载。参数是Char数组或String数组。您的字符串可能正在转换为char数组。像这样显式传递一个字符串数组:
testString.Split(New String() { "10" }, StringSplitOptions.None)
答案 1 :(得分:1)
Vb仅将delimiter参数视为单个字符。
答案 2 :(得分:1)
尝试包装第二个分割,使其像第一个分割,即:
Split( Split(testString,"10")(1), "20" )(0)"
答案 3 :(得分:1)
这是一个棘手的场景,我之前见过旅行的人,所以我认为这比其他答案给出的解释更值得。使用原始格式Split(testString,"10")(1).Split("20")(0)
,您无意中使用了两个不同 Split
函数。
第一个Split(testString,"10")
正在使用Microsoft.VisualBasic.Strings.Split
函数,它接受String类型参数。 http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.split(v=vs.110).aspx
第二个.Split("20")(0)
正在使用System.String.Split
方法,该方法没有带有String
参数的重载。 http://msdn.microsoft.com/en-us/library/System.String.Split(v=vs.110).aspx
所以发生的事情是:
Split(testString,"10")
使用Microsoft.VisualBasic.Strings.Split
返回新的String(){" 123456789"," 11121314151617181920"} (1)
表示获取返回数组的第一个位置,即" 11121314151617181920" "11121314151617181920".Split("20")(0)
使用System.String.Split
,并尝试拆分字符串分隔符" 20" Public Function Split (ParamArray separator As Char()) As String()
的签名。 ParamArray参数选项允许您将逗号分隔的值列表传递给函数,类似于String.Format如何使用动态的替换值。 http://msdn.microsoft.com/en-us/library/538f81ec.aspx "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)