Scala 字符串拆分异常

Scala String split bizareness

这段代码是我写的

val line = "Aaa Bbb Ccc"
line.split(" ")

按预期产生以下输出:

res31: Array[String] = Array(Aaa, Bbb, Ccc)

我稍微修改一下代码:

val line = "Aaa|Bbb|Ccc"
line.split("|")

现在我不明白输出:

res30: Array[String] = Array("", A, a, a, |, B, b, b, |, C, c, c)

为什么会这样?

管道“|”是一个正则表达式字符,表示两个选项之一。在那种情况下要么为空要么为空。

尝试将其转义以将其用作字符:

val line = "Aaa|Bbb|Ccc"
line.split("\|")

res0: Array[String] = Array(Aaa, Bbb, Ccc)

split 接受一个表示要拆分的正则表达式的字符串 - “|”是空字符串或另一个空字符串的正则表达式,因此它在每个字符之间拆分。您需要转义 |:

line.split("\|")

或者,您可以使用带有 Char 参数的重载进行拆分(在 StringOps 中定义):

line.split('|')