2012-08-27 62 views
5

我不明白为什么以下输出有意义。在一个空字符串字符串拆分方法行为

字符串分割方法返回字符串的数组长度为1

String[] split = "".split(",");
System.out.println(split.length);
返回String的阵列长度的字符串的1

String[] split = "Java".split(",");
System.out.println(split.length);
返回一组长度为1

如何区分?

+3

它应该做什么? –

+1

它没有找到拆分的地方,所以它返回整个字符串的数组。 – Pshemo

+0

我想说这应该返回0 –

回答

10

the documentation

通过此方法返回的数组包含由另一个子给定表达式匹配终止此字符串的每个子或者在字符串的末尾结束。

要回答你的问题,它做什么,它有望做:返回的字符串是由输入字符串的结尾结束(因为没有,被发现)。该文档还指出:

如果表达式与输入的任何部分不匹配,则结果数组只有一个元素,即该字符串。

请注意,这是第一条语句的结果。如果找不到搜索字符串,那么Java开发人员不会添加额外的情况。

+0

javadoc规则它们都:) –

1

它返回原始字符串(在本例中为空字符串),因为没有要分割的字符串。

2

我也打过这个。它返回的是字符串,但不包括分割字符。如果你想获得任何条件,使用的StringTokenizer:

StringTokenizer st = new StringTokenizer(someString,','); 
int numberOfSubstrings = st.countTokens(); 
+0

此代码不工作,单引号是错误的,它将返回1代码如下:new StringTokenizer(“ABC”,“;”)。countTokens() –

0

它会返回一个,因为您正在测量拆分数组的大小,该数组包含一个元素:一个空字符串。