scala - 字符串拆分(“|”)工作不正常?

时间:2015-01-27 14:56:50

标签: scala

我在scala字符串拆分上遇到了一个奇怪的问题

这是我的代码:

scala> val s1 = "oauth_token=FOO&oauth_token_secret=BAR&oauth_expires_in=3600"
s1: String = oauth_token=FOO&oauth_token_secret=BAR&oauth_expires_in=3600

scala> s1.split("&")
res3: Array[String] = Array(oauth_token=FOO, oauth_token_secret=BAR, oauth_expires_in=3600)

到目前为止,split方法效果很好,但是..

scala> val s2 = "oauth_token=FOO|oauth_token_secret=BAR|oauth_expires_in=3600"
s2: String = oauth_token=FOO|oauth_token_secret=BAR|oauth_expires_in=3600

scala> s2.split("|")
res4: Array[String] = Array("", o, a, u, t, h, _, t, o, k, e, n, =, F, O, O, |, o, a, u, t, h, _, t, o, k, e, n, _, s, e, c, r, e, t, =, B, A, R, |, o, a, u, t, h, _, e, x, p, i, r, e, s, _, i, n, =, 3, 6, 0, 0)

该方法实际上会拆分每个字符,即使奇怪的是,前面会出现一个空字符串。

我尝试了其他分隔符,例如%,,该方法仍然有效。当split用作分隔符时,|似乎无法正常工作?

2 个答案:

答案 0 :(得分:10)

split()需要一个正则表达式,而regex-land |表示" OR",所以你要拆分空字符串或空字符串,这是你所看到的。

您可以使用转义分割文字|

scala> val s2 = "oauth_token=FOO|oauth_token_secret=BAR|oauth_expires_in=3600"
s2: String = oauth_token=FOO|oauth_token_secret=BAR|oauth_expires_in=3600

scala> s2.split("\\|")
res0: Array[String] = Array(oauth_token=FOO, oauth_token_secret=BAR, oauth_expires_in=3600)

答案 1 :(得分:5)

Scala有一个隐式转换,它在接受split()的字符串上提供char方法:

scala> val s2 = "oauth_token=FOO|oauth_token_secret=BAR|oauth_expires_in=3600"
s2: String = oauth_token=FOO|oauth_token_secret=BAR|oauth_expires_in=3600

scala> s2.split('|')
res0: Array[String] = Array(oauth_token=FOO, oauth_token_secret=BAR, oauth_expires_in=3600)

当然,这仅适用于分割器是单个字符的情况。如果它是一个多字符字符串,您需要自己跟踪正则表达式特定的字符。