Java String.split是否可以返回null String []

Woo*_*Moo 38 java string defensive-programming

是否可以split返回null String[]?我很好奇,因为我想在我的代码中尽可能地保持防御,而不需要进行不必要的检查.代码如下:

String[] parts = myString.split("\\w");  
Run Code Online (Sandbox Code Playgroud)

在使用parts后分割之前,是否需要执行空检查?

pal*_*lto 50

它永远不会返回null.如果您不确定,应该始终检查方法的javadoc.例如String#split(String)说,

此方法的工作方式就像调用双参数split方法一样

......并String#split(String,int)说:

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

从Javadoc您还可以找出可能发生的异常类型,更重要的是为什么抛出这些异常.另外一个非常重要的事情是检查类是否是线程安全的.

  • `split(String regex)`的Javadoc并不表示无法返回null. (5认同)
  • @Paul:不,但是如果可以返回`null`,它(或者`Pattern#split` docs)就会这么说.并且双参数版本,单个参数说它调用,说*"如果表达式与输入的任何部分都不匹配,那么结果数组只有一个元素,即这个字符串."* (5认同)

Pau*_*aul 6

我建议您在API不清楚时下载Java源代码.这里的所有答案都只是告诉你答案,但你应该亲自看看.您可以从此处下载Java源代码(查看页面底部附近).

通过遵循源代码,您将最终到达String[] Pattern.split(CharSequence input, int limit).返回值来自非null,ArrayList在其toArray上调用.toArray不返回null:如果是空列表,你将得到一个空数组.

所以最后,不,你不必检查null.