在scala中使用字符和字符串拆分字符串之间的区别

时间:2016-09-04 07:02:51

标签: string scala split character

我在scala中基于管道|字符拆分字符串。我看到两个不同的选项来做到这一点。我很惊讶地看到我在不同的场景中得到了两个不同的结果。

检查出来:

  

enter image description here

如果是字符串,它也会返回管道符,而在字符的情况下,它会按预期返回结果。

我很想知道这两者的区别。

3 个答案:

答案 0 :(得分:4)

问题在于,当您提供String参数时,此String可以是正则表达式。 |是正则表达式世界中的一个特殊字符。

以下示例后,您将更加清楚

scala> val s1 = "abcdef"
s1: String = abcdef

scala> s1.split("|")
res7: Array[String] = Array(a, b, c, d, e, f)

如果您想获得所需的结果,则必须使用|

逃离\\
scala> val s1 = "abcdef"
s1: String = abcdef

scala> s1.split("\\|")
res7: Array[String] = Array(abcdef)

答案 1 :(得分:2)

如果是字符串,则需要转义。使用"\\|"代替"|"

scala> "a|b|c|d".split("|")
res19: Array[String] = Array(a, |, b, |, c, |, d)

scala> "a|b|c|d".split("\\|")
res20: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split('|')
res21: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("""\|""")
res23: Array[String] = Array(a, b, c, d)

答案 2 :(得分:1)

还有一些逃避正则表达式的方法:

scala> "a|b|c|d".split(raw"\|")
res114: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split(raw"\Q|")
res115: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("""\Q|""")
res116: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("\\Q|")
res117: Array[String] = Array(a, b, c, d)

请注意,变量以raw字符串进行插值,因此需要注意$

当你有几个要逃脱的角色并且不希望在每个角色之前放一个反斜杠时,

\Q特别有用。