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('|')