字符串分割方法的行为

5
我不明白为什么以下输出结果有意义。
一个空字符串上的String split方法返回具有长度为1的String数组 String[] split = "".split(",");
System.out.println(split.length);
返回具有长度为1的String数组 String[] split = "Java".split(",");
System.out.println(split.length);
返回具有长度为1的String数组
如何区分?

1
它没有找到分割的位置,因此返回了包含整个字符串的数组。 - Pshemo
我认为它应该返回0。 - Srujan Kumar Gulla
此函数总是返回至少1。 - gigadot
@lordlupine:如果搜索字符串找不到,split.length 将为 1。如果可以找到字符串,则 split.length 至少为 2。如果您希望在 , 上拆分,则 """Java" 之间也没有实际区别,因为两者都不包含搜索字符串。 - Simeon Visser
4个回答

10

来自文档

该方法返回的数组包含此字符串的每个子字符串,它们以匹配给定表达式的另一个子字符串终止或以字符串结尾终止。

回答您的问题,它做了预期的事情:返回的子字符串以输入字符串的末尾终止(因为没有找到,)。 文档还说明:

如果表达式与输入中的任何部分都不匹配,则生成的数组仅有一个元素,即此字符串。

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


2

我也遇到了这个问题。它返回的是分割字符之前的字符串。如果你想获取没有字符串的结果,请使用StringTokenizer:

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

这段代码不起作用,单引号有误,并且对于像new StringTokenizer("ABC",";").countTokens()这样的代码,它将返回1。 - justcode

1

它返回原始字符串(在这种情况下为空字符串),因为没有逗号可分割。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接