Java empty String split ArrayIndexOutOfBoundsException

时间:2014-07-07 08:33:54

标签: java string split

我在Java中的String的split函数中遇到了一个意外的特性,这是我的代码:

final String line = "####";
final String[] lineData = line.split("#");
System.out.println("data: " + lineData[0] + " -- " + lineData[1]);

这段代码给了我一个ArrayIndexOutOfBoundsException,而我希望它打印""和"" (两个空字符串),或者可能为null和null(两个空字符串)。

如果我更改

的代码
final String line = " # # # #";
final String[] lineData = line.split("#");
System.out.println("data: " + lineData[0] + " -- " + lineData[1]);

然后打印" "和" " (预期的行为)。

如何让我的第一个代码不抛出异常,并给我一个空字符串数组?

由于

3 个答案:

答案 0 :(得分:8)

您可以使用split方法的limit属性来实现此目的。尝试

final String line = "####";
final String[] lineData = line.split("#", -1);
System.out.println("Array length : " + lineData.length);
System.out.println("data: " + lineData[0] + " -- " + lineData[1]);

答案 1 :(得分:1)

一如既往,答案写在Javadoc

  

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。 因此,结尾数组中不包含尾随空字符串

由于您的数组仅由空字符串组成,因此不会将它们添加到其中,因此尝试访问这些值会导致ArrayOutOfBoundException

答案 2 :(得分:0)

如果我理解你的问题,可以这样做 -

final String line = " # ";
final String[] lineData = line.split("#");
System.out.println("data: " + lineData[0] + " -- " + lineData[1]);

问题是空字符串不是一个字符。