繁体   English   中英

为什么split函数在java中表现得像这样?

[英]why split function behave like this in java?

如果我做

    String a = ""
    String b = a.split(" ")[0];

它没有给出ArrayIndexOutOfBoundException

但是当我这样做的时候

    String a = " "
    String b = a.split(" ")[0];

它给了我ArrayIndexOutOfBoundException

当我这样做的时候

    String a = " abc"
    String b = a.split(" ")[0];

它没有给我例外为什么呢?

这有点奇怪。

事情是,在你的第一个例子中,空字符串“”是一个字符串,而不是null。 因此,当您说:使用标记“”拆分此“”时,模式不匹配,并且您获得的数组是原始字符串。 就像你做的那样

String a = "abc";
String b = a.split(" ")[0];

要拆分的模式不匹配,因此您将获得一个标记,即原始字符串。

在第二种情况下会出现异常,因为String的COMPLETE内容正是您传递给分割的分隔符,因此您最终得到一个空数组。

如果您想了解更多细节,请告诉我,但这就是它。

后:

String a = " "
String[] arr = a.split(" "); 

arr是一个空数组。 这就是当您尝试访问其第一个(也是不存在的)元素时抛出ArrayIndexOutOfBoundsException的原因。 现在,之后:

String a = " abc"
String[] arr = a.split(" ");

arr有一个元素: "abc" ,这就是为什么当你试图访问它的第一个元素时不会抛出异常的原因。

情况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];

这不是一个极端的案例,因为它显然必须返回至少一个元素,因此也不例外。

字符串a =“”;

字符串b = a.split(“”)[0];

执行此操作时,由于不存在“拆分”字符,因此不执行拆分操作,并返回一个数组,其中first和only元素为空字符串。

字符串a =“”;

字符串b = a.split(“”)[0];

虽然在这种情况下它会尝试拆分字符串,但不会在任何一侧放置任何值,因此不会创建任何数组。 因此,当您尝试访问其第0个元素时,它会给出ArrayOutOfBoundException。

字符串a =“abc”;

字符串b = a.split(“”)[0];

在这种情况下,分裂发生,“abc”放在第0位(我猜),你留下一个大小大于0的数组。 问题解决了! ..

如果提供的regex完全匹配, String.split()将返回一个空数组的可能性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM