Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java string类的split()的特殊行为_Java_String - Fatal编程技术网

Java string类的split()的特殊行为

Java string类的split()的特殊行为,java,string,Java,String,据我所知,以下程序应将0,0打印为输出 public class Test1 { public static void main(String[] args) { System.out.println("".split(";").length); //1 System.out.println(";".split(";").length);//0 } } 然而,当我运行这个程序时,我会得到1,0作为输出 public class Test1 {

据我所知,以下程序应将
0,0
打印为输出

public class Test1 {
    public static void main(String[] args) {
        System.out.println("".split(";").length); //1
        System.out.println(";".split(";").length);//0
    }
}
然而,当我运行这个程序时,我会得到
1,0
作为输出

public class Test1 {
    public static void main(String[] args) {
        System.out.println("".split(";").length); //1
        System.out.println(";".split(";").length);//0
    }
}

请帮助我了解这里发生了什么?

您发现了一个很酷的edge案例: 如果字符串不包含该字符,则通过仅包含该字符串的数组将其拆分,并返回该字符串

如果分隔字符在字符串中,则会得到一个数组,其中包含除空字符串以外的所有拆分字符

因此,在第二种情况下,结果应该是一个包含两个空字符串的数组,但split函数会删除它们。在第一种情况下,因为split实际上并没有拆分任何内容,也不会删除任何内容。

相关代码

        // If no match was found, return this
        if (off == 0)
            return new String[]{this};

        // Add remaining segment
        if (!limited || list.size() < limit)
            list.add(substring(off, value.length));
//如果找不到匹配项,则返回此
如果(关闭==0)
返回新字符串[]{this};
//添加剩余段
如果(!limited | | list.size()
如本文所述

如果表达式与输入的任何部分都不匹配,则结果数组只有一个元素,即此字符串


由于输入不包含正则表达式,即“;”,因此它返回整个字符串。

在第一种情况下,由于根本不存在匹配项,因此将按照Javadoc的以下部分返回字符串:

如果表达式与输入的任何部分都不匹配,则结果数组只有一个元素,即该字符串

对于第二种情况,如果发生拆分,则将删除尾随的空字符串:

如果n为零,则将尽可能多次应用模式,数组可以有任何长度,尾随空字符串将被丢弃

(强调矿山)


来源:

这是同一个用Scala标记的问题:Rok Kralj的答案解决了这个特殊的不一致性:@nullpointer——请检查lang类型,它是Scala!!!!你认为scala和java是一样的吗?@LoneWolf这有区别吗?将此应用于Java是否有任何问题?@defaultlocale--是的,因为它们都是不同的语言,并且具有不同的语言规格……为了该语言,请阅读以下答案<代码>“;;;;”。长度给出0,
”;;;1;“。长度
给出3。第二种情况是非常疯狂和意外的行为。感谢用户…:)的辩护这实际上是问题的答案。如果(off==0),我会在上面的
行中插入更多上下文。