我很确定答案是肯定的,但我只是想确认一下非空字符串(无论它包含什么)都不会返回除了有效字符串作为第一个成员之外的任何情况。 split返回的数组。
换句话说。
String foo = ""; // or "something" or "a b c" or any valid string at all
String[] bar = foo.split(",")[0];
我的理解是bar永远不会为null,并且赋值行无法失败。如果在字符串中找不到分隔符,则它只返回foo作为返回数组的第一个元素。
答案 0 :(得分:9)
答案 1 :(得分:1)
(1)如果foo
与正则表达式模式直接匹配,则split
返回的数组长度为0
,而foo.split[0]
将引发ArrayIndexOutOfBoundsException
}。
(2)请记住,如果正则表达式在运行时无效,String.split
可能会抛出PatternSyntaxException
。
答案 2 :(得分:1)
是。 bar将等于字符串“”
.split(“,”)尝试在逗号后拆分,但原始字符串中没有逗号, 所以原来的字符串会被返回。
更棘手的是:
String s = ",,,,,,,"
String[] sarray = s.split(",");
这里sarray [0]将返回ArrayIndexOutOfBoundsException。
答案 3 :(得分:1)
以下是一组演示上述内容的测试用例:
public class Test {
public static void main(String[] args){
test("x,y");
test(",y");
test("");
test(",");
}
private static void test(String x){
System.out.println("testing split on value ["+x+"]");
String y = x.split(",")[0];
if(null == y){
System.out.println("x returned a null value for first array element");
} else if(y.length() < 1) {
System.out.println("x returned an empty string for first array element");
} else {
System.out.println("x returned a value for first array element");
}
}
}
运行时,这就是你得到的:
$ javac Test.java && java Test
testing split on value [x,y]
x returned a value for first array element
testing split on value [,y]
x returned an empty string for first array element
testing split on value []
x returned an empty string for first array element
testing split on value [,]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Test.test(Test.java:11)
at Test.main(Test.java:6)