System.out.println("neon.mems.cmu.edu/people/".split("/").length); // output is 2
我正在做一些网址处理。令我惊讶的是,我刚刚得到了上面的结果。我认为元素的数量可能是拆分器的数量加一。
直到现在,我才意识到最后一个空字符串(或只是null
)从拆分数组中截断。我想知道是否每种编程语言都是这种情况。
不,并非每种编程语言都如此,并且没有通用规范,因此没有理由这样做。
去
a := strings.Split("neon.mems.cmu.edu/people/", "/")
fmt.Println(len(a)) // prints 3
Javascript
在浏览器的控制台中输入:
"neon.mems.cmu.edu/people/".split('/')
结果是
["neon.mems.cmu.edu", "people", ""]
当匹配为空时你应该做什么并不是这个split
概念显而易见或固有的。一个证明是旧的 Internet Explorer 版本确实删除了那些空匹配项。
为什么它被丢弃的空字符串?
String#split(regx)
内部调用实际String#split(regx,0)
执行Pattern.compile(regex).split(this, limit);
-代码片段
if (limit == 0)
while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
resultSize--;
如果 limit 为 0,则从 resultSize 中丢弃空字符串。
如何获得想要的结果?
String#split(regx,limit)
使用得到想要的结果。
System.out.println("neon.mems.cmu.edu/people/".split("/",3).length);
结果 :
3
关于语言规范,我同意@dystroy