首页 > 解决方案 > scala split 为空时忽略最后一个值

问题描述

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)。

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

标签: scala

解决方案


这个问题来自Java(因为这是定义 String#split 的地方)。正如您在此处看到的,在默认情况下(即limit=0),尾随的空字符串被丢弃。

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


推荐阅读