2015-07-20 85 views
2

如果我拆分“hello |”“| hello” with “|”字符,然后我得到第一个值和第二个版本的两个值。Java字符串拆分不一致

String[] arr1 = new String("hello|").split("\\|"); 
String[] arr2 = new String("|hello").split("\\|"); 
System.out.println("arr1 length: " + arr1.length + "\narr2 length: " + arr2.length); 

此打印出:

ARR1长度:1
ARR2长度:2

这是为什么?

+1

'split(String regex)' - *此方法的工作原理与通过调用具有给定表达式和极限参数为零的双参数拆分方法一样。尾随空字符串因此不包含在结果数组中。* –

+0

检查此问题http://stackoverflow.com/questions/15113272/java-split-by-a-successive-character/15113300#15113300 – m0skit0

+0

还检查[this]( http://stackoverflow.com/a/19503404/3841803) – silentprogrammer

回答

8

根据java docssplit如果第一个字符是分隔符,则创建一个空字符串,但如果最后一个字符(或连续字符)是分隔符,则不创建空字符串(或空字符串)。无论您使用的分隔符如何,您都会得到相同的行为。

+1

“*无论使用什么分隔符,您都会得到相同的行为*”,这取决于Java版本。在前8段,当我们使用split(“”)'时,我们总是以空字符串开始,但现在(在Java 8中)我们不会(与其他零长度正则表达式相同)。 – Pshemo

+0

@Pshemo有趣。我不知道。谢谢。 – Eran

+0

更多信息在这里https://stackoverflow.com/questions/22718744/why-does-split-in-java-8-sometimes-remove-empty-strings-at-start-of-result-array – Pshemo

3

尾随空字符串将不会包含在数组中检查以下语句。

String#split 此方法类似于调用与 两个参数分割方法给定表达式和零限制参数。 尾随的空 字符串因此不包含在结果数组中。

1

String#split总是返回通过拆分这个字符串围绕给定的正则表达式的匹配计算的字符串数组。