Scala拆分为空时忽略最后一个值

时间:2019-06-12 14:22:38

标签: scala

scala> val st1 = "|||||||000001|09/01/2014|V|174500,00|22||BD |2540|LEC|1000|BEB|
       01|53||AE|111 ||49|94,22|6||||||||2|2|App|80|2|||"
scala> st1.split('|').length
resXX: Int = 39

scala> val st2 = "|||||||000001|09/01/2014|V|174500,00|22||BD |2540|LEC|1000|BEB|
       01|53||AE|111 ||49|94,22|6||||||||2|2|App|80|2| | |"
scala> st2.split('|').length
resXX: Int = 41

即最后一个空字段将被拆分忽略。 除了将所有"||"替换为"| |"

之外,还有其他解决方案吗?

预期输出为Int = 41

实际上是真实文件中的行,例如:

"|||||||000001|09/01/2014|V|174500,00|22||BD |2540|LEC|1000|BEB|
       01|53||AE|111 ||49|94,22|6||||||||2|2|App|80|2|||150"

是包含数字的第42列。 (在这种情况下,结果为Int = 42

每行具有相同的|,但是根据列的内容,split('|').length返回不同的结果! (31,40,...,42)。

我可以理解最后一个分隔符后缺少该列,但不能理解以前的分隔符。

1 个答案:

答案 0 :(得分:4)

此问题来自Java(因为在此定义了String#split)。 如您所见,here在默认情况下(limit=0)将丢弃尾随的空字符串。

要使其按预期工作,可以使用str.split('|', -1)