相关疑难解决方法(0)

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

我正在阅读政府文本文件,其中$被用作分隔符,但我认为分隔符不重要...

所以这是预期的:

'a$b$c$d'.split('$')
# => ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)

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

'a$b$$d'
# or: 
'a$b$c$'
Run Code Online (Sandbox Code Playgroud)

但是,每行可能有连续的尾随分隔符,例如:

"w$x$$\r\n"
Run Code Online (Sandbox Code Playgroud)

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

"w$x$$\r\n".chomp.split('$')
# => ["w", "x"] 
Run Code Online (Sandbox Code Playgroud)

不做chomp得到我想要的结果,虽然我应该选择最后一个元素:

"w$x$$\r\n".split('$')
# => ["w", "x", "", "\r\n"]
Run Code Online (Sandbox Code Playgroud)

所以我要么:

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

这看起来真的很尴尬......我在这里错过了一些东西吗?

ruby string

11
推荐指数
1
解决办法
1117
查看次数

拆分成空子串

我得到这个结果(注意第一个""是前面的空匹配):

"babab".split("b")
# => ["", "a", "a"]
Run Code Online (Sandbox Code Playgroud)

通过"a"在上面的输入中替换为空字符串,如下所示,

"bbb".split("b")
Run Code Online (Sandbox Code Playgroud)

我希望得到以下结果:

["", "", ""]
Run Code Online (Sandbox Code Playgroud)

但实际上,我得到:

[]
Run Code Online (Sandbox Code Playgroud)

这背后的逻辑是什么?

ruby string split

4
推荐指数
1
解决办法
71
查看次数

标签 统计

ruby ×2

string ×2

split ×1