以下是两种情况:
案例1:
scala> "".split('f')
res3: Array[String] = Array("")
案例2:
scala> "f".split('f')
res5: Array[String] = Array()
为什么它在这里表现不同!具体的解释会很棒!
答案 0 :(得分:9)
在第一种情况下,您提供的字符串和分隔符与该字符串中的任何字符都不匹配。所以它只返回原始字符串。这可以用非空字符串示例来说明:
scala> "abcd".split('f')
res2: Array[String] = Array(abcd)
但是,您的第二个字符串包含仅分隔符。所以它匹配分隔符并拆分字符串。由于拆分不包含任何内容 - 它返回一个空数组。根据Java String docs:
如果表达式不匹配:
如果表达式与输入的任何部分都不匹配,那么结果数组只有一个元素,即该字符串。
如果表达式匹配:
因此,结尾的空字符串不包含在结果数组中。
来源:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String,%20int)
答案 1 :(得分:0)
如果您将查看split的实现,您会注意到它检查String内的分隔符索引,如果在给定的String中没有出现分隔符,则它将导致String本身。