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).
我能理解最后一个分隔符后面缺少一列,但不能理解缺少前面的列。
最佳答案
这个问题来自 Java(因为这是定义 String#split 的地方)。
如你所见here ,在默认情况下(即 limit=0
),尾随的空字符串将被丢弃。
要使其按预期工作,您可以使用 str.split('|', -1)
。
关于scala split 在为空时忽略最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56564447/