为什么Split在不同的字符串上表现不同?

时间:2016-10-24 08:30:25

标签: string scala split

以下是两种情况:

案例1:

scala> "".split('f')
res3: Array[String] = Array("")

案例2:

scala> "f".split('f')
res5: Array[String] = Array()

为什么它在这里表现不同!具体的解释会很棒!

2 个答案:

答案 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本身。