Scala:将csv字符串转换为Array

时间:2015-06-16 04:34:33

标签: arrays string scala split scala-collections

我尝试将scala字符串转换为数组,方法是将其按,拆分。例如:

var string = "a,b,c,d,"
array =  string.split(",")
arr: Array[String] = Array(a, b, c, d)

但我得到的输出是Array(a, b, c, d),而不是Array(a, b, c, d, )。 split方法忽略字符串中的最后一个逗号。有没有其他方法可以解决这个问题?。我认为这是微不足道的,但我是scala的新手。救命!

2 个答案:

答案 0 :(得分:2)

使用split -1参数。

string.split(",",-1)

要了解-1参数的含义,让我们看一下方法签名

public String[] split(String regex, int limit)

limit 参数控制应用模式的次数,因此会影响结果数组的长度。如果限制n大于零,那么模式将被应用最多(n-1)次,数组的长度将不大于n,并且数组的最后一个条目将包含超出最后匹配分隔符的所有输入。

如果n是非正数,那么模式将被应用尽可能多次,并且数组可以具有任何长度。如果n为零,那么模式将被应用尽可能多次,数组可以具有任何长度,并且尾随空字符串将被丢弃。

示例:

scala> val myString = "a,b,c,d,,," 
scala> val stringSplit = myString.split(",")
scala> arr: Array[String] = Array(a, b, c, d)

如果这次我们指定限制

scala> val myString = "a,b,c,d,,," 
scala> val stringSplitWithLimit = myString.split(",", -1)
scala> arr: Array[String] = Array(a, b, c, d, "", "", "")

此行为来自Java(因为Scala使用Java字符串)。 Here是直接来自Javadoc的文档。

答案 1 :(得分:1)

一般情况下,csv不仅仅是带逗号的字符串列表。例如:

 1,2,"3aa,bbb 
    cc\"c", 4
 5,6,7,8

是完全正确的CSV文件

因此最好使用一些外部解析器,例如:https://github.com/tototoshi/scala-csv