我对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", "", "")
我错过了什么吗?
答案 0 :(得分:44)
正如Peter在他的回答中提到的,"string".split()
,在Java和Scala中,默认情况下不会返回尾随空字符串。
但是,您可以通过传入第二个参数来指定它返回尾随的空字符串,如下所示:
String s = "elem1,elem2,,";
String[] tokens = s.split(",", -1);
这将获得预期的结果。
您可以找到相关的Java doc here。
答案 1 :(得分:3)
我认为尾随空格不包含在返回值中。
split(String regex)
的JavaDoc说:“此方法就像通过使用给定表达式和limit参数为零调用双参数split
方法一样工作。因此,尾随空字符串不包含在结果数组。“
因此,在您的情况下,应使用split(String regex, int limit)
以便在返回值中获取尾随空字符串。