【问题标题】:Scala StringLike split method creates extra double quotes for leading spacesScala StringLike split 方法为前导空格创建额外的双引号
【发布时间】:2013-05-16 16:47:15
【问题描述】:

我尝试对 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 方法......我很困惑......

【问题讨论】:

    标签: string scala split space double-quotes


    【解决方案1】:

    不,不是。这就是 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
    

    如你所见,没有多余的引号

    要在引用后修剪空格,您可以在拆分中使用正则表达式:

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

    【讨论】:

    • 一个更通用的拆分正则表达式是:""",\p{Space}*"""
    • 感谢您的快速回答和忽略空格的正则表达式。因此,尽管 scala 文档谈到了分隔符(字符),但 scala split 似乎采用了正则表达式 - 那里没有提到正则表达式。
    • @fredfred Scala strings are Java stringsJava strings have split method which takes regexp。 StringLike pimps Java 字符串与 split 方法接受分隔符作为一个字符或字符数组
    • @om-nom-nom 谢谢,这完美地解决了我的困惑!简单的方法签名会路由到任一实现。
    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多