Scala String拆分bizareness

Kno*_*uch 4 string split scala

我写了这段代码

val line = "Aaa Bbb Ccc"
line.split(" ")
Run Code Online (Sandbox Code Playgroud)

它按预期产生以下输出:

res31: Array[String] = Array(Aaa, Bbb, Ccc)
Run Code Online (Sandbox Code Playgroud)

稍微更改了代码:

val line = "Aaa|Bbb|Ccc"
line.split("|")
Run Code Online (Sandbox Code Playgroud)

现在我不明白输出:

res30: Array[String] = Array("", A, a, a, |, B, b, b, |, C, c, c)
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Lee*_*Lee 11

split采用表示正则表达式的字符串来分割 - "|" 是空字符串或另一个空字符串的正则表达式,因此它在每个字符之间分割.你需要逃避|:

line.split("\\|")
Run Code Online (Sandbox Code Playgroud)

或者你可以使用带Char参数的重载(在中定义StringOps):

line.split('|')
Run Code Online (Sandbox Code Playgroud)


maa*_*asg 8

管道"|" 是一个正则表达式字符,意味着两个选项之一.在这种情况下,空或空.

尝试转义它以将其用作角色:

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

res0: Array[String] = Array(Aaa, Bbb, Ccc)
Run Code Online (Sandbox Code Playgroud)