代码'////'.split('/')
会产生[]
。虽然我预计它会['', '', '', '', '']
。如果这是红宝石的一个特征,为什么它的设计是这样的呢?
答案 0 :(得分:17)
您不能通过分隔符拆分分隔符字符串。
您应该将limit作为第二个参数传递给split函数以实现此行为
'////'.split('/',-1)
=>
["", "", "", "", ""]
如果省略limit参数,则禁止尾随空字段。如果limit是正数,则最多将返回该字段数(如果limit为1,则整个字符串将作为数组中的唯一条目返回)。如果为负数,则返回的字段数没有限制,并且不会抑制尾随空字段
答案 1 :(得分:10)
调查split
方法的行为表明它是优化的结果,它只是在最后一次匹配后裁剪空数组元素,如下所示:
'////'.split('/')
=> []
'//a//'.split('/')
=> ["", "", "a"]
答案 2 :(得分:3)
此设计为使用尾随分隔符解析字符串提供了便利。例如:
'1␣2␣3␣␣'.split('␣')
现在会提供['1', '2', '3']
而不是['1', '2', '3', '', '']
。
此功能仅用于简化工作流程。
但是,我不喜欢这个功能,因为它打破了这种方法的纯度。要实现上述效果,您只需在rstrip('␣')
和'1␣2␣3␣␣'
之间额外split('␣')
。