以下是我的REPL输出。我不确定为什么string.split在这里不起作用。
val s = "Pedro|groceries|apple|1.42"
s: java.lang.String = Pedro|groceries|apple|1.42
scala> s.split("|")
res27: Array[java.lang.String] = Array("", P, e, d, r, o, |, g, r, o, c, e, r, i, e, s, |, a, p, p, l, e, |, 1, ., 4, 2)
答案 0 :(得分:68)
如果您使用引号,则需要正则表达式拆分。 |
是“或”字符,所以你的正则表达式什么都不匹配。所以一切都分开了。
如果您使用split('|')
或split("""\|""")
,您应该得到您想要的内容。
答案 1 :(得分:7)
|
是一个特殊的正则表达式字符,用作 OR
操作的逻辑运算符。
由于java.lang.String#split(String regex);接受正则表达式,因此您将字符串拆分为“none OR none”,这是关于正则表达式拆分的另一个特性,其中 none 实质上意味着“在每个字符之间”。
要获得你想要的东西,你需要正确地逃避你的正则表达式。要转义模式,您需要在\
之前加上字符,因为\
是一个特殊的String
字符(例如\t
和\r
),你需要实际加倍逃避,以便最终得到s.split("\\|")
。
有关完整的Java正则表达式语法,请参阅java.util.regex.Pattern javadoc。
答案 2 :(得分:4)
Split将正则表达式作为第一个参数,因此您的调用被解释为"空字符串或空字符串"。要获得预期的行为,您需要转义管道字符" \\ |"。