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)。
我可以理解最后一个分隔符后缺少该列,但不能理解以前的分隔符。
答案 0 :(得分:4)
此问题来自Java(因为在此定义了String#split)。
如您所见,here在默认情况下(limit=0
)将丢弃尾随的空字符串。
要使其按预期工作,可以使用str.split('|', -1)
。