为什么Ruby String#split不将连续的尾随分隔符视为单独的实体?

我正在从政府文本文件中读取$作为分隔符,但我不认为分隔符字符很重要

所以这是预期的:

'a$b$c$d'.split('$')
# => ["a","b","c","d"]

在我正在使用的数据文件中,列标题行(第一行)被均匀填充,即没有空标题,如:

'a$b$$d'
# or: 
'a$b$c$'

但是,每行可能具有连续的后跟分隔符,例如:

"w$x$$\r\n"

通常,我读取每一行并且chomp它.但是这会导致String#split将最后两个分隔符视为一列:

"w$x$$\r\n".chomp.split('$')
# => ["w","x"]

不做chomp会让我想要的结果,虽然我应该chomp最后一个元素:

"w$x$$\r\n".split('$')
# => ["w","x","","\r\n"]

所以我必须:

>如果最终的非换行符不是连续的分隔符,请选中该行
>保留换行符,执行拆分,然后对最后一个元素进行chomp,如果最后的字符是连续的分隔符

这似乎真的很尴尬…我在这里错过了什么?

解决方法

您需要传递一个负值作为第二个参数进行拆分.这样可以防止它阻止尾随的空字段:
"w$x$$\r\n".chomp.split('$',-1)
# => ["w",""]

the docs on split.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...