为什么'////'.split('/')产生[]?

Sho*_* Ya 14 ruby

代码'////'.split('/')导致[].虽然我期待它['', '', '', '', ''].如果这是红宝石的一个特征,为什么这样设计呢?

Ser*_*sko 17

您不能通过分隔符拆分分隔符字符串.

您应该将limit作为第二个参数传递给split函数以实现此行为

'////'.split('/',-1)
=> 
["", "", "", "", ""]
Run Code Online (Sandbox Code Playgroud)

如果省略limit参数,则禁止尾随空字段.如果limit是正数,则最多将返回该字段数(如果limit为1,则整个字符串将作为数组中的唯一条目返回).如果为负数,则返回的字段数没有限制,并且不会抑制尾随空字段

  • *+ 1*..我做了...... :)但你可以添加来自[doc]的行(http://www.ruby-doc.org/core-2.0.0/String.html#method-i-split )like - **如果省略limit参数,则尾随空字段被抑制**.如果limit是正数,则最多将返回该字段数(如果limit为1,则整个字符串将作为数组中的唯一条目返回).**如果为负数,则返回的字段数没有限制,并且不会抑制尾随空字段.** (2认同)

Мал*_*евъ 10

split方法行为的研究表明它是优化的结果,它简单地在最后一次匹配后裁剪出空数组元素,如下所示:

'////'.split('/')
=> []

'//a//'.split('/')
=> ["", "", "a"]
Run Code Online (Sandbox Code Playgroud)


Sho*_* Ya 3

这种设计为解析带有尾随分隔符的字符串提供了便利。例如:

\n\n

'1\xe2\x90\xa32\xe2\x90\xa33\xe2\x90\xa3\xe2\x90\xa3'.split('\xe2\x90\xa3')现在将给予['1', '2', '3']而不是['1', '2', '3', '', '']

\n\n

此功能只是为了简化工作流程。

\n\n

然而,我不喜欢这个功能,因为它破坏了这个方法的纯粹性。要达到上面的效果,只需要在和rstrip('\xe2\x90\xa3')之间多加一个即可。'1\xe2\x90\xa32\xe2\x90\xa33\xe2\x90\xa3\xe2\x90\xa3'split('\xe2\x90\xa3')

\n