Scala字符串分割的古怪行为

4

我写了这段代码

val line = "Aaa Bbb Ccc"
line.split(" ")

按预期的输出产生以下输出:
res31: Array[String] = Array(Aaa, Bbb, Ccc)

我稍微修改了代码:

轻微地 改变了代码:

val line = "Aaa|Bbb|Ccc"
line.split("|")

现在我不理解输出内容:

res30: Array[String] = Array("", A, a, a, |, B, b, b, |, C, c, c)

为什么会发生这种情况?


1
我不是Scala的专家,所以我会把提供包含适当解决方案和相关文档链接的答案留给其他人,但这可能是因为String.split(String)采用正则表达式。也许尝试使用line.split("\\|")line.split('|') - Edd
1
FTR这不仅限于Scala,当然在Java中也会发生,因为String.split来自Java。 - lambdista
2个回答

11

split函数接受一个表示用于分隔的正则表达式字符串 - "|"是一个匹配空字符串或另一个空字符串的正则表达式,因此它会在每个字符之间进行分割。你需要使用转义符"\"来转义 | 符号:

line.split("\\|")

或者您可以使用带有Char参数的重载来拆分(在StringOps中定义):

line.split('|')

8

管道符号 "|" 是一个正则表达式字符,表示两个选项中的任意一个。在这种情况下,要么是空的,要么是空的。

尝试对其进行转义以将其用作字符:

val line = "Aaa|Bbb|Ccc"
line.split("\\|")

res0: Array[String] = Array(Aaa, Bbb, Ccc)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接