35

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

3 回答 3

86

如果您使用引号,则您要求进行正则表达式拆分。 |是“或”字符,因此您的正则表达式不匹配或不匹配。所以一切都是分裂的。

如果你使用split('|')或者split("""\|""")你应该得到你想要的。

于 2012-07-01T18:53:24.523 回答
8

|是一个特殊的正则表达式字符,用作操作的逻辑运算符OR

由于java.lang.String#split(String regex); 接受一个正则表达式,你用"none OR none"分割字符串,这是正则表达式分割的另一个特点,其中none本质上意味着"在每个字符之间"

为了得到你想要的,你需要正确地转义你的正则表达式模式。要转义该模式,您需要在字符前面加上\and 因为\是一个特殊String字符(例如思考\t\r),您实际上需要双重转义,以便最终得到s.split("\\|").

有关完整的 Java 正则表达式语法,请参阅java.util.regex.Pattern javadoc

于 2012-07-01T18:56:34.030 回答
6

Split 将正则表达式作为第一个参数,因此您的调用被解释为“空字符串或空字符串”。要获得预期的行为,您需要转义管道字符“\\|”。

于 2012-07-01T18:55:56.490 回答