scala string.split不起作用

scala string.split不起作用,string,scala,split,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

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

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


如果您使用
split(“|”)
split(“\\\\”)
您应该得到您想要的。

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

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

因为接受了正则表达式,所以使用“none或none”来拆分字符串,这是正则表达式拆分的另一个特点,none本质上是指“在每个字符之间”

为了得到您想要的,您需要正确地避开正则表达式模式。要转义该模式,您需要在字符前面加上
\
,因为
\
是一个特殊的
字符串
字符(比如
\t
\r
),您实际上需要双重转义,以便最终得到
s.split(\\\\124;”


有关完整的Java正则表达式语法,请参阅。

good one。在scala中,“”和“”之间的区别是什么?
“stuff”“”
引用一个文本字符串<代码>“填充”
解释转义字符。由于反斜杠在Java字符串和正则表达式中都是转义字符,因此需要转义转义字符才能将其放入正则表达式:
“\\\\”
。这很快就会让人困惑,所以最好使用三重引号并使用文字字符串。。。“somestring”是否与“somestring”相同?
“c”是单个字符<代码>“这是一个(文字)字符串,不是一个字符。”
啊……我知道了。我来自JavaScript,看起来我忘记了一些基本的东西。