2014-12-29 84 views
13

我对Scala字符串拆分行为有点困惑,因为它不能一致地工作,并且缺少一些列表元素。例如,如果我有一个包含4列和1个缺失元素的CSV字符串。如何在结果中将尾随空字符串拆分为字符串?

"elem1, elem2,,elem 4".split(",") = List("elem1", "elem2", "", "elem4") 

太好了!这就是我所期望的。

在另一方面,如果两个元素3和4丢失,则:

"elem1, elem2,,".split(",") = List("elem1", "elem2") 

而我希望它返回

"elem1, elem2,,".split(",") = List("elem1", "elem2", "", "") 

我缺少的东西?

回答

36

正如Peter在他的回答中提到的,在Java和Scala中的"string".split()不会返回尾随的空字符串。

你可以,但是,指定它通过传递第二个参数,这样返回尾随空字符串:

String s = "elem1,elem2,,"; 
String[] tokens = s.split(",", -1); 

这将让你预期的结果。

你可以找到相关的Java doc here

2

我相信尾部空白空间不包含在返回值中。

JavaDoc for split(String regex)说:“此方法的工作方式如同调用带有给定表达式的双参数split方法,并且极限参数为零,因此尾随的空字符串不包含在结果数组中。

因此,在您的情况下,应使用split(String regex, int limit)以便在返回值中获得尾随空字符串。

相关问题