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跃向前:“”
字符串的末尾:“世界”