splitPreserveAllTokens

splitPreserveAllTokens

        String string = "Hello,,l,, World";
        String test1[] = string.split(",,");

        String test2[] = StringUtils.splitPreserveAllTokens(string , ",,");


test2有四个要素


[Hello, , l, , World]


有两个空元素。
Test1有3


[Hello, l, World]


这是预期的行为。

根据splitPreserveAllTokens的javadoc,以下是合乎逻辑的

     * StringUtils.splitPreserveAllTokens("::cd:ef", ":")    = ["", "", cd", "ef"]
     * StringUtils.splitPreserveAllTokens(":cd:ef:", ":")    = ["", cd", "ef", ""]


但是仍然不清楚test2的输出。
请解释一下test2的其他空元素。

最佳答案

在文档中显示为:


  相邻的分隔符被视为空令牌的分隔符。





  spacerChars-用作分隔符的字符,null在空白处分割


表示如果您使用“,”或“ ,,”作为第二个参数,它应该没有任何区别。

结合第一引号和示例,我假定字符串的开头和结尾与分隔符一样好:

StringUtils.splitPreserveAllTokens(":cd:ef:", ":")
在开始和第一个冒号之间有一个(空)标记,在第一个和第二个冒号(“ cd”)之间有一个标记,在第二个和第三个冒号(“ ef”)之间有一个标记,最后一个冒号和末端之间有一个(再次为空)导致从文档显示的结果的字符串:["", "cd", "ef", ""](带有正确的错字)。

在您的情况下,上面的第二个引用更相关。 “ ,,”不被视为分隔符,而是一组分隔符。在这种情况下,含义“,”等效于“,”。然后,在第一个引号后面可以解释得到的结果:
字符串开头到第一个,:“ Hello”
第一个逗号到第二个逗号:“”
第二个逗号到第三个:“ l”
rid跃向前:“”
字符串的末尾:“世界”

07-24 13:45