我在scala中基于管道|
字符拆分字符串。我看到两个不同的选项来做到这一点。我很惊讶地看到我在不同的场景中得到了两个不同的结果。
检查出来:
如果是字符串,它也会返回管道符,而在字符的情况下,它会按预期返回结果。
我很想知道这两者的区别。
答案 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
特别有用。