我在scala String split上遇到了一个奇怪的问题
这是我的代码:
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)
Run Code Online (Sandbox Code Playgroud)
到目前为止,该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)
Run Code Online (Sandbox Code Playgroud)
该方法实际上分割出每个字符,即使奇怪的是,前面会出现一个空字符串.
我曾尝试其他分隔符,例如%,,中,法依然很不错.作为分隔符,split似乎无法正常工作|?
ars*_*jii 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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
当然,这仅适用于分割器是单个字符的情况.如果它是一个多字符字符串,您需要自己跟踪正则表达式特定字符.
| 归档时间: |
|
| 查看次数: |
441 次 |
| 最近记录: |