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('|')
这段代码是我写的
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('|')