2012-04-17 81 views
1

ruby docs String類的split方法狀態:ruby​​中的string.split(「,」,-1)和string.split(「,」, - 4)有什麼區別?

[如果限制是]負,沒有限制的字段的數量返回,並且結尾的空字段不抑制。

所以據我可以告訴有任何以下的沒有區別:

string="1,,2,3,,,4,,5,,6" 

string.split(",", -1) 
string.split(",", -4) 
string.split(",", -1000000) 

他們都返回相同的值:["1", "", "2", "3", "", "", "4", "", "5", "", "6"]

只是想知道爲什麼它會是可能的以這種方式分配不同的負面限制。

另外,如果我想刪除尾隨空值(如空格)會發生什麼?我知道我可以做string.strip.split(",",-1),但有沒有辦法做到這一點,而不使用strip方法?

回答

4

通過您的測試和您的報價文檔,string.split(",", -1)string.split(",", -4)之間看起來沒有區別。該規範說沒有區別,你發現在測試中沒有區別。萬歲。

但請注意,string.strip.split(..)不會刪除尾隨空值:

irb(main):003:0> string="1,,2,3,,,4,,5,,6,,," 
=> "1,,2,3,,,4,,5,,6,,," 
irb(main):004:0> string.split(",", -1) 
=> ["1", "", "2", "3", "", "", "4", "", "5", "", "6", "", "", ""] 
irb(main):005:0> string.strip.split(",", -1) 
=> ["1", "", "2", "3", "", "", "4", "", "5", "", "6", "", "", ""] 

你必須選擇另一種機制來剝離空。

+0

謝謝,我在null和whitespace之間感到困惑。我現在明白了,歡呼 – stephenmurdoch 2012-04-17 00:50:16

2

Ruby往往有不止一種方法來做同樣的事情,甚至是語法。只需在您的代碼中使用-1即可。

你問的是如何沒有限制,但做空場抑制?根據文檔,您可以省略限制參數。

+0

謝謝,沒想過只是刪除了限制。 – stephenmurdoch 2012-04-17 00:51:15