Java String.split是否可能返回空字符串[]

Java String.split是否可能返回空字符串[],java,string,defensive-programming,Java,String,Defensive Programming,split是否可以返回空的字符串[]?我很好奇,因为我想在代码中尽可能地防御性,而不进行不必要的检查。代码如下: String[] parts = myString.split("\\w"); 我是否需要在使用partspost spliting之前执行null检查?否,您不需要在parts上检查null。Split方法调用Patter.Split方法,该方法在方法的开头执行此操作: ArrayList匹配列表=新建ArrayList() 最后执行matchList.toArray()返回

split
是否可以返回空的
字符串[]
?我很好奇,因为我想在代码中尽可能地防御性,而不进行不必要的检查。代码如下:

String[] parts = myString.split("\\w");  

我是否需要在使用
parts
post spliting之前执行null检查?

否,您不需要在parts上检查null。

Split方法调用Patter.Split方法,该方法在方法的开头执行此操作:

ArrayList匹配列表=新建ArrayList()

最后执行matchList.toArray()返回数组


因此无需测试空值。

它从不返回空值。如果不确定,应该始终检查方法的javadoc。比如说

此方法的工作原理类似于调用两个参数
split
方法

…并说:

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


从Javadoc中,您还可以了解会发生什么样的异常,更重要的是,为什么会抛出这些异常。还有一件非常重要的事情需要检查,那就是类是否是线程安全的。

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

遵循源代码,您将得到
String[]Pattern.split(CharSequence输入,int限制)
。返回值来自一个非null的
ArrayList
,在该列表上调用
toArray
toArray
不返回null:如果列表为空,则返回空数组


所以最后,不必检查null。

我检查了javadoc,返回null!=投掷NPE。我看到了它可以抛出的模式异常。
split(String regex)
的Javadoc并不表示不能返回null。@Paul:不,但是如果可以返回
null
,它(或者
模式#split
docs)会这样说。单参数调用的双参数版本表示“如果表达式与输入的任何部分都不匹配,则生成的数组只有一个元素,即该字符串。”永远不要依赖于查看实现。实现可以改变。文档就是你正在为之工作的合同。。但该方法的实现不太可能改变,否则使用该方法的整个java世界都将陷入混乱。在这种情况下,从文档中可以清楚地看到,若该方法改变,则它不能返回
null
。请参阅T.J.Crowder在其他地方的评论。