String Scala字符串拆分双倍性

String Scala字符串拆分双倍性,string,scala,split,String,Scala,Split,我写了这段代码 val line = "Aaa Bbb Ccc" line.split(" ") 它按预期生成以下输出: res31: Array[String] = Array(Aaa, Bbb, Ccc) 我稍微更改了代码: 现在我不理解输出: res30: Array[String] = Array("", A, a, a, |, B, b, b, |, C, c, c) 为什么会发生这种情况?Pipe“|”是一个正则表达式字符,表示两个选项之一。在这种情况下,要么是空的,要么是空的

我写了这段代码

val line = "Aaa Bbb Ccc"
line.split(" ")
它按预期生成以下输出:

res31: Array[String] = Array(Aaa, Bbb, Ccc)
我稍微更改了代码:

现在我不理解输出:

res30: Array[String] = Array("", A, a, a, |, B, b, b, |, C, c, c)
为什么会发生这种情况?

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

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

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

res0: Array[String] = Array(Aaa, Bbb, Ccc)
获取表示要拆分的正则表达式的字符串-“|”是空字符串或另一个空字符串的正则表达式,因此它在每个字符之间拆分。您需要退出
|

line.split("\\|")
或者,您可以使用重载,该重载接受一个要拆分的
Char
参数(在
StringOps
中定义):


我不是Scala方面的专家,所以我会让别人提供一个包含正确解决方案和文档相关链接的答案,但这可能是因为
String.split(String)
需要一个正则表达式。也许可以尝试
line.split(\\\\;”)
line.split(“\\\\”)
?FTR这不仅限于Scala,当然在Java中也会发生,因为String.split来自Java
line.split("\\|")
line.split('|')