-1
System.out.println("neon.mems.cmu.edu/people/".split("/").length); // output is 2

我正在做一些网址处理。令我惊讶的是,我刚刚得到了上面的结果。我认为元素的数量可能是拆分器的数量加一。

直到现在,我才意识到最后一个空字符串(或只是null)从拆分数组中截断。我想知道是否每种编程语言都是这种情况。

4

2 回答 2

5

不,并非每种编程语言都如此,并且没有通用规范,因此没有理由这样做。

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 版本确实删除了那些空匹配项。

于 2013-01-22T08:49:30.297 回答
1

为什么它被丢弃的空字符串?

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

于 2013-01-22T08:56:58.413 回答