为什么"||".split("\\ |").长度返回0而不是3?

tgg*_*gne 7 java regex split apex-code

当分割表达式中有相邻的分隔符时,我期望null或空字符串 - 没有消除它.

Java代码如下:

public class splitter {
    public static void main(String args[]) {
        int size = "||".split("\\|").length;
        assert size == 3 : "size should be 3 and not " + size;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望得到{"","",""}或{null,null,null}.要么没事.

也许有一个不会被空话愚弄的正则表达式?

Pau*_*ora 14

根据javadoc:

此方法就像通过split使用给定表达式和limit参数为零调用双参数方法一样工作.因此,结尾的空字符串不包含在结果数组中.

用于split(String, int)阐述的javadoc :

limit参数控制应用模式的次数,因此会影响结果数组的长度.如果限制n大于零,那么模式将最多应用n - 1次,数组的长度将不大于n,并且数组的最后一个条目将包含超出最后匹配分隔符的所有输入.如果n是非正数,那么模式将被应用尽可能多的次数,并且数组可以具有任何长度.如果n为零,那么模式将被应用尽可能多的次数,数组可以具有任何长度,并且将丢弃尾随的空字符串.

(强调我的)

所以要返回一个空字符串数组,请调用 "||".split("\\|", -1)