调用split
方法是否可能返回一个空的String[]
数组?我很好奇,因为我想尽可能在我的代码中进行保护而不必进行不必要的检查。以下是示例代码:
String[] parts = myString.split("\\w");
在我使用 splitting
后,我需要执行空值检查吗?
调用split
方法是否可能返回一个空的String[]
数组?我很好奇,因为我想尽可能在我的代码中进行保护而不必进行不必要的检查。以下是示例代码:
String[] parts = myString.split("\\w");
在我使用 splitting
后,我需要执行空值检查吗?
它从不返回null。如果您不确定,应始终检查方法的javadoc。例如,String#split(String)
说:
此方法的工作方式类似于调用两个参数的
split
方法。
如果表达式与输入的任何部分都不匹配,则生成的数组仅具有一个元素,即该字符串本身。
您还可以从Javadoc中找出可能发生的异常类型,更重要的是了解为什么会抛出这些异常。另外,要检查的一件非常重要的事情是这些类是否线程安全。
String[] Pattern.split(CharSequence input, int limit)
。返回值来自非空的ArrayList
,在其中调用了toArray
。 toArray
不会返回null:如果列表为空,则会返回一个空数组。Split方法调用Pattern.split方法,在方法的开头执行以下操作:
ArrayList<String> matchList = new ArrayList<String>();
并在结尾处执行matchList.toArray()以返回一个数组。
因此不需要测试null值。
split(String regex)
的 Javadoc 没有指明它不会返回 null。 - Paulnull
可能会被返回,那么它(或者Pattern#split
文档)会说明。而且单参数版本说它调用了双参数版本,双参数版本说:“如果表达式与输入的任何部分都不匹配,则生成的数组只有一个元素,即此字符串。” - T.J. Crowder