Scala StringLike split方法为前导空格创建额外的双引号

时间:2013-05-21 19:38:16

标签: string scala split space double-quotes

我为csv样式的字符串尝试了一个简单的分割,它包含逗号之后的空格:

scala> """"First", "SecondAfterSpace"""".split(",")
res0: Array[String] = Array("First", " "SecondAfterSpace"")

scala> res0(0)
res3: String = "First"

scala> res0(1)
res4: String = " "SecondAfterSpace""

结果数组的第二个字符串有意外双引号,比原始字符串多。

可以在开头包含额外的空间,因为我还没有修剪它。但我希望得到类似的结果,如下所示,带有额外的前导空格,而不是额外的双引号:

scala> """"First","SecondNoSpace"""".split(",")
res1: Array[String] = Array("First", "SecondNoSpace")

我知道我可以通过以下方式解决此问题,但我想了解我是否做错了或者这是一个错误:

scala> """"First", "SecondAfterSpaceTrimmed"""".split(",").map(_.trim)
res2: Array[String] = Array("First", "SecondAfterSpaceTrimmed")

只是为了确保我也尝试了所有变体,如

.split(',')
.split(""",""")
.split("""\,""")
.split(Array(','))

但所有的双重引号都相同。

在该上下文中:从scala-doc我看到使用了StringLike中的方法。该文档讨论了一个char数组。然而,我可以使用没有记录的正则表达式,所以如果它在Java字符串中使用split方法让我怀疑......我很困惑......

1 个答案:

答案 0 :(得分:6)

不,不是。这就是REPL代表它的方式:

scala> val xs = """"First", "SecondAfterSpace"""".split(",")
xs: Array[String] = Array("First", " "SecondAfterSpace"")

scala> xs.last
res0: String = " "SecondAfterSpace""

scala> xs.last.count(_ == '"')
res1: Int = 2

如您所见,没有额外的报价

要在引用后修剪空格,可以在split中使用regexp:

scala> val xs = """"First", "SecondAfterSpace"""".split(",[ ]?")
xs: Array[String] = Array("First", "SecondAfterSpace")
相关问题