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

我正在做一些URL处理。令我惊讶的是,我刚刚得到了上面的结果。我认为元素的数量可以是分离器的数量加上一个。Java字符串分割长度

我没有意识到最后一个空字符串(或者只是null)从分割数组中截断直到现在。我想知道每种编程语言都是如此。

+4

这是一个图书馆决定不服的 - 而不是语言的一部分的。我不会特别期待*的一致性。 –

+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版本did remove those empty matches

+1

很好的例子。我相信。谢谢。 –

+0

''neon.mems.cmu.edu/people /“。split(”/“)[2]'导致'ArrayIndexOutOfBoundsException'异常。 –

+0

@乔伊我认为你错过了我的答案中的“浏览器控制台”。根据OP对其他语言的需求,这个答案显示了一个Javascript示例。 –

1

为什么会丢弃空字符串?

String#split(regx)内部调用String#split(regx,0)其执行Pattern.compile(regex).split(this, limit);实际上 - code snippet

if (limit == 0) 
     while (resultSize > 0 && matchList.get(resultSize-1).equals("")) 
      resultSize--; 

其中空字符串已经从resultSize丢弃,如果限为

如何获得期望的结果?

String#split(regx,limit)使用得到想要的结果。

System.out.println("neon.mems.cmu.edu/people/".split("/",3).length); 

结果:

3 

而关于语言规范我与@dystroy

+0

哈哈我喜欢这个把戏。我可以通过'limit'参数改变任何我喜欢的长度。 –