2014-12-29 127 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)以便在返回值中獲得尾隨空字符串。

相關問題