使用split返回的数组的第一个元素是否总是安全的?

时间:2012-03-16 19:09:56

标签: java

我很确定答案是肯定的,但我只是想确认一下非空字符串(无论它包含什么)都不会返回除了有效字符串作为第一个成员之外的任何情况。 split返回的数组。

换句话说。

String foo = ""; // or "something" or "a b c" or any valid string at all

String[] bar = foo.split(",")[0];

我的理解是bar永远不会为null,并且赋值行无法失败。如果在字符串中找不到分隔符,则它只返回foo作为返回数组的第一个元素。

4 个答案:

答案 0 :(得分:9)

不,It may fail

如果ArrayIndexOutOfBound

,它将无法foo =","

答案 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)