我在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]);
然后打印" "和" " (预期的行为)。
如何让我的第一个代码不抛出异常,并给我一个空字符串数组?
由于
答案 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]);
问题是空字符串不是一个字符。