拆分空字符串将返回大小为1的数组:
scala> "".split(',')
res1: Array[String] = Array("")
Run Code Online (Sandbox Code Playgroud)
请考虑这返回空数组:
scala> ",,,,".split(',')
res2: Array[String] = Array()
Run Code Online (Sandbox Code Playgroud)
请解释 :)
Sam*_*sby 67
如果将橙色分成零次,则只有一个橙色.
Rok*_*alj 41
Java和Scala拆分方法分两步运行,如下所示:
",,,".split(",")返回空数组的原因.根据这个,结果"".split(",")应该是一个空数组,因为第二步,对吗?
这应该.不幸的是,这是一个人为引入的角落案例.这是不好的,但至少它是记录中java.util.regex.Pattern,如果你还记得看看文档:
对于n == 0,结果与n <0相同,但不会返回尾随空字符串.(注意,输入本身是空字符串的情况是特殊的,如上所述,并且limit参数不适用于那里.)
所以,我建议你总是n == -1作为第二个参数传递(这将跳过上面的第二步),除非你明确知道你想要实现什么/你确定空字符串不是你的程序将作为输入得到的东西.
如果您已在项目中使用Guava,则可以尝试使用Splitter(文档)类.它有一个非常丰富的API,使您的代码非常容易理解.
Splitter.on(".").split(".a.b.c.") // "", "a", "b", "c", ""
Splitter.on(",").omitEmptyStrings().split("a,,b,,c") // "a", "b", "c"
Splitter.on(CharMatcher.anyOf(",.")).split("a,b.c") // "a", "b", "c"
Splitter.onPattern("=>?").split("a=b=>c") // "a", "b", "c"
Splitter.on(",").limit(2).split("a,b,c") // "a", "b,c"
Run Code Online (Sandbox Code Playgroud)
Nic*_*ndo 40
拆分空字符串会将空字符串作为第一个元素返回.如果在目标字符串中找不到分隔符,则将获得一个大小为1的数组,该数组包含原始字符串,即使它是空的.
Dan*_*ral 32
出于同样的原因
",test" split ','
Run Code Online (Sandbox Code Playgroud)
和
",test," split ','
Run Code Online (Sandbox Code Playgroud)
将返回一个大小为2的数组.第一个匹配之前的所有内容都将作为第一个元素返回.
web*_*rjn 22
"a".split(",")- > "a"
因此
"".split(",")- >""
在所有编程语言中,我都知道空字符串仍然是有效的字符串。因此,使用任何分隔符进行拆分将始终返回单个元素数组,其中该元素是空白字符串。如果它是一个空(非空)字符串,那将是一个不同的问题。