txt = "1aaa5"
然后
txt.split("a")
在ruby 1.9中产生[1,“”,“”,5]。有谁能解释为什么?特别是,为什么不[1,5]?感谢。
答案 0 :(得分:10)
因为它在每个“a”
的实例上被拆分所以,1,“”,“”,5
使用/ a + /或“aaa”代替
irb(main):002:0> txt.split(/a+/)
=> ["1", "5"]
答案 1 :(得分:3)
因为你的分隔符是一个而且Ruby无法猜测你不想要空条目。考虑一下您的示例,但用逗号替换a
字符。
txt = "1,,,5"
在我的世界中,我可能会认为中间两个列的4列值为零。我当然不希望它删除空条目,因为如果没有4,我不知道哪些应该是零。
因为无法猜测,它会返回数组中的空“字段”和非空“字段”。如果你需要它来省略空的“字段”,请使用@ S.Mark的解决方案。
答案 2 :(得分:2)
你所看到的行为是有道理的。当您致电string.split("a")
时,您说“使用'a'作为分隔符”,并在分隔符之间为我提供一系列值。在txt
中的第一个“a”和第二个“a”之间,该值为空字符串;同样适用于第二个和第三个“a”之间的值。这就是你看到[1, "", "", 5]
就好像txt是1,,,5
而你选择','作为分隔符。如果有人询问列表中的值是什么:
答案 3 :(得分:2)
当您致电split
时,您正在传递一个分隔符,该分隔符本质上会在分割时从字符串中删除。
举例来说:
s = ",foo"
当你打电话给s.split(",")
时,你说“把逗号左侧的所有内容放入它自己的数组条目中,然后把逗号右边的所有内容放入下一个条目,忽略逗号本身“。该函数将“逗号左侧的所有内容”视为""
,而不是任何内容。
所以你的字符串遵循以下模式:
1aaa5
1, aa5
1, '', a5
1, '', '', 5
这解释了为什么有两个空字符串,而不仅仅是[1,5]
答案 4 :(得分:0)
您的分隔符“a”存在3次。尝试拆分“aaa”。
答案 5 :(得分:0)
如果未指定要拆分的模式,则拆分空格上的拆分。所以,除了其他解决方案,你可以做到
txt = "1aaa5"
txt.gsub('a',' ').split
=>[1, 5]
(如果文本不包含相关的空格)。