scala string.split不起作用

时间:2012-07-01 18:49:55

标签: string scala split

以下是我的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)

3 个答案:

答案 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将正则表达式作为第一个参数,因此您的调用被解释为"空字符串或空字符串"。要获得预期的行为,您需要转义管道字符" \\ |"。