該代碼'////'.split('/')
結果爲[]
。雖然我預計它是['', '', '', '', '']
。如果這是ruby的一個特性,爲什麼它是這樣設計的?'////'split('/')爲什麼產生[]?
回答
此設計爲解析具有尾隨分隔符的字符串提供了便利。例如:
'1␣2␣3␣␣'.split('␣')
現在將給['1', '2', '3']
而不是['1', '2', '3', '', '']
。
此功能僅用於簡化工作流程。
但是,我不喜歡這個功能,因爲它打破了這種方法的純度。爲了達到上述效果,您只需要在'1␣2␣3␣␣'
和split('␣')
之間的額外rstrip('␣')
。
'('␣')'看起來很可愛。 –
不能用分隔符分隔字符串分隔符。
你應該傳遞極限作爲第二個參數分裂函數來實現這種行爲
'////'.split('/',-1)
=>
["", "", "", "", ""]
如果省略了限制參數,尾隨空字段被抑制。如果limit是一個正數,那麼將返回最多數量的字段(如果limit爲1,則整個字符串將作爲數組中唯一的條目返回)。如果爲負值,則返回的字段數沒有限制,並且尾部空字段不會被抑制
* + 1 * ..我做了... :)但是你可以從[doc](http://www.ruby-doc.org/core-2.0.0/String.html#method-i-拆分)like - **如果限制參數被省略,則尾隨空字段被抑制**。如果limit是一個正數,那麼將返回最多數量的字段(如果limit爲1,則整個字符串將作爲數組中唯一的條目返回)。 **如果爲負數,則返回的字段數不受限制,並且不會限制結尾空字段。** –
謝謝。真正有用的評論。 – SergeyKutsko
split
方法的行爲調查顯示它是優化的結果,它只是在上次匹配後裁剪出空數組元素,因爲它如下所示:
'////'.split('/')
=> []
'//a//'.split('/')
=> ["", "", "a"]
- 1. 爲什麼split()產生額外的,設置後限制-1
- 2. 爲什麼(![] + [])[+ !! [] + []]產生「a」
- 3. 爲什麼networkx.draw()什麼都不產生?
- 4. 什麼是產生
- 5. 爲什麼產生itertools.islice產生不可用的嵌套對象?
- 6. 爲什麼new [-1]產生段錯誤,而new [-2]產生bad_alloc?
- 7. 爲什麼python string split()沒有分裂
- 8. 爲什麼split(「。」)失敗? java的
- 9. 爲什麼app_dev.php可用於生產?
- 10. 它爲什麼會產生兩個MsgBox?
- 11. XAMPP爲什麼不適合生產?
- 12. 爲什麼FileOutputStream會產生NullPointerException?
- 13. RemoveIf產生一個異常,爲什麼?
- 14. 爲什麼會產生以下錯誤?
- 15. 爲什麼此代碼會產生IndexOutOfBoundsException?
- 16. 爲什麼URL.openStream()方法會產生IOException?
- 17. 爲什麼SQLite3不會產生錯誤
- 18. 這是爲什麼產生一個StackOverflowError
- 19. 爲什麼vfork產生這個輸出?
- 20. 爲什麼fputcsv會產生重複列?
- 21. 爲什麼VecMedian產生超出範圍?
- 22. 這是爲什麼會產生警告?
- 23. 這爲什麼會產生NetworkOnMainThreadException?
- 24. 爲什麼Sparkjava不適合生產?
- 25. 爲什麼CONTENTEDITABLE =「真」產生髒HTML
- 26. 爲什麼此代碼會產生InvalidMemoryOperationError?
- 27. 什麼是生產網站?
- 28. 什麼是產生在Haskell
- 29. 什麼產生DataSet.designer.vb文件
- 30. 這是爲什麼產生一個java.lang.StackOverflowError,這是什麼意思?
+1 ..因爲問一個好問題...... :) –
雖然這個問題很有趣,但它並不是最好的形式。您的問題可能會誤導讀者,認爲連續四次斜線對此效果都很重要,但事實並非如此。您將以較短的斜線序列獲得相同的結果。 – sawa