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

为什么Ruby String#split不将连续的尾随分隔符视为单独的实体?,ruby,string,Ruby,String,我从一个政府文本文件中读取,其中$用作分隔符,但我认为分隔符字符不重要 因此,这是预期的: 'a$b$c$d'.split('$') # => ["a", "b", "c", "d"] 在我使用的数据文件中,列标题行(第一行)是统一填充的,即没有空标题,如: 'a$b$$d' # or: 'a$b$c$' 但是,每行可能有连续的尾随分隔符,例如: "w$x$$\r\n" 通常,我读每一行,然后咀嚼它。但这会导致String#split将最后两个分隔符视为一列: "w$x$$\r\n

我从一个政府文本文件中读取,其中$用作分隔符,但我认为分隔符字符不重要

因此,这是预期的:

'a$b$c$d'.split('$')
# => ["a", "b", "c", "d"]
在我使用的数据文件中,列标题行(第一行)是统一填充的,即没有空标题,如:

'a$b$$d'
# or: 
'a$b$c$'
但是,每行可能有连续的尾随分隔符,例如:

"w$x$$\r\n"
通常,我读每一行,然后咀嚼它。但这会导致String#split将最后两个分隔符视为一列:

"w$x$$\r\n".chomp.split('$')
# => ["w", "x"] 
虽然我应该咀嚼最后一个元素,但不咀嚼会得到想要的结果:

"w$x$$\r\n".split('$')
# => ["w", "x", "", "\r\n"]
因此,要么我必须:

  • 如果最后的非换行字符不是连续的分隔符,请选择行
  • 保留换行符,进行拆分,如果最后一个字符是连续分隔符,则选择最后一个元素

这看起来真的很尴尬……我在这里遗漏了什么吗?

您需要将负值作为第二个参数传递给
split
。这会阻止它抑制尾随的空字段:

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

请参阅。

谢谢……记录在案,文档是我第一次去的地方,但我看到第二个参数的假名“limit”,我的大脑决定关闭自己,不通读,以查看除所包含的正数之外的所有选项。谢谢