scala - 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)。
我可以理解最后一个分隔符之后缺少列,但不能理解缺少前面的列。
解决方案
这个问题来自Java(因为这是定义 String#split 的地方)。正如您在此处看到的,在默认情况下(即limit=0
),尾随的空字符串被丢弃。
要使其按预期工作,您可以使用str.split('|', -1)
.
推荐阅读
- c++ - 如何在 C++ 中过滤数组?
- python - 在特定目录中创建文件的名称和修改日期列表,并从中制作数据框
- javascript - 如何让 Jsfiddle 读取我的本地 csv 文件?
- python - 为什么 execute() 附加空值而 executemany() 不附加?
- java - 将两个整数相除并将结果四舍五入到最接近的整数
- wordpress - 空白国家/州下拉菜单并在 woocommerce 设置中销售到特定国家/地区
- unity3d - 在增强现实中将 3d 对象放置在真实对象上
- hibernate - Hibernate 带宽问题:比 SQL Developer 花费更多的时间
- azure - 带有 PowerShell 5+ 的 Azure 的应用程序、创建日期、权限和 2FA 设置列表
- go - 如果我的密钥都被命名为“密钥”,如何从 BSON 获取 JSON?