Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala StringLike split方法为前导空格创建额外的双引号_String_Scala_Split_Space_Double Quotes - Fatal编程技术网

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

Scala StringLike split方法为前导空格创建额外的双引号,string,scala,split,space,double-quotes,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"

我尝试对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")
我知道我可以通过以下方法解决这个问题,但我想了解我是否做错了什么,或者这是否是一个bug:

scala> """"First", "SecondAfterSpaceTrimmed"""".split(",").map(_.trim)
res2: Array[String] = Array("First", "SecondAfterSpaceTrimmed")
为了确保我也尝试了所有的变体,比如

.split(',')
.split(""",""")
.split("""\,""")
.split(Array(','))
但所有这些都有相同的额外双引号的结果


在这种情况下:从scala文档中,我看到使用了StringLike中的方法。该文档讨论了字符数组。但是我可以使用regex,它没有文档记录,所以如果它在Java字符串中使用split方法,我会产生怀疑。。。我很困惑…

不,不是。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")

一个更通用的拆分正则表达式是:
“”,\p{Space}*“”
感谢您的快速回答和忽略空格的正则表达式。所以scala split似乎采用了正则表达式,尽管scala doc谈到了分隔符(chars)——但没有提到正则表达式。@fredfred and。StringLike pimps Java字符串,具有拆分方法,可将分隔符作为一个字符或字符串数组接受chars@om-不,不,谢谢,这完全解决了我的困惑!简单方法签名将路由到任一实现。