繁体   English   中英

为什么“||”。split(“\\\\ |”)。长度返回0而不是3?

[英]Why does “||”.split(“\\|”).length return 0 and not 3?

当分割表达式中有相邻的分隔符时,我期望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;
    }
}

我希望得到{“”,“”,“”}或{null,null,null}。 要么没事。

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

根据javadoc

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

split(String, int)的javadoc详细说明:

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

(强调我的)

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

我需要仔细看看Paul的答案(他看起来更简单),但我能够找到解决断言的前瞻表达式(我道歉,代码在Apex中 - 它只是包装Java)。

static testMethod void testPatternStringSplit() {
        Pattern aPattern = Pattern.Compile('(?=\\|)');
        system.assertEquals(3, aPattern.split('||').size());
        system.assertEquals(3, aPattern.split(' | | ').size());
        system.assertEquals(3, aPattern.split('a|b|c').size());
        system.assertEquals(3, aPattern.split('a|b|').size());
        system.assertEquals(3, aPattern.split('|b|c').size());
        system.assertEquals(3, aPattern.split('|b|').size());
}

我需要编写一些代码来测试Paul的...

暂无
暂无

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

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