String a = ""
String b = a.split(" ")[0];
它没有给出ArrayIndexOutOfBoundException
但是当我这样做的时候
String a = " "
String b = a.split(" ")[0];
它给了我ArrayIndexOutOfBoundException
当我这样做时
String a = " abc"
String b = a.split(" ")[0];
它没有给我例外 为什么这样?
答案 0 :(得分:3)
有点奇怪。
事情是,在你的第一个例子中,空字符串“”是一个字符串,而不是null。因此,当您说:使用标记“”拆分此“”时,模式不匹配,并且您获得的数组是原始字符串。就像你做的那样
String a = "abc";
String b = a.split(" ")[0];
要拆分的模式不匹配,因此您将获得一个标记,即原始字符串。
你在第二种情况下得到一个例外,因为你的String的COMPLETE内容正好是你传递给分割的分隔符,所以你最终得到一个空数组。
如果您想了解更多细节,请告诉我,但这就是它。
答案 1 :(得分:2)
后:
String a = " "
String[] arr = a.split(" ");
arr
是一个空数组。这就是为什么当你试图访问它的第一个(和不存在的)元素时它会抛出ArrayIndexOutOfBoundsException
。现在,之后:
String a = " abc"
String[] arr = a.split(" ");
arr
有一个元素:"abc"
,这就是当您尝试访问其第一个元素时不会抛出异常的原因。
答案 2 :(得分:2)
案例#1
String a = ""
String b = a.split(" ")[0];
来自Javadoc:
如果表达式与输入的任何部分都不匹配,那么 结果数组只有一个元素,即这个字符串。
所以split()
给你一个单元素数组,由输入字符串(""
)组成。因此也不例外。
案例#2
String a = " "
String b = a.split(" ")[0];
来自Javadoc:
因此,结果中不包括尾随空字符串 阵列。
你有两个这样的尾随空字符串,没有别的。因此,您将返回零大小的数组,从而导致异常。
案例#3
String a = " abc"
String b = a.split(" ")[0];
这不是一个极端的案例,因为它显然必须返回至少一个元素,因此也不例外。
答案 3 :(得分:1)
字符串a =“”;
字符串b = a.split(“”)[0];
执行此操作时,由于不存在“split”字符,因此不执行拆分操作,并返回一个数组,其中first和only元素为空字符串。
字符串a =“”;
字符串b = a.split(“”)[0];
虽然在这种情况下它会尝试拆分字符串,但不会在任何一侧放置任何值,因此不会创建任何数组。因此,当您尝试访问其第0个元素时,它会给出ArrayOutOfBoundException。
字符串a =“abc”;
字符串b = a.split(“”)[0];
在这种情况下,分裂发生并且“abc”被放置在第0位(我猜)并且你留下了一个大小大于0的数组。问题解决了!! ..
答案 4 :(得分:0)
如果提供的String.split()
regex
总是有可能返回一个空数组