用Ruby分裂数组的奇怪行为(v1.9.2)

时间:2011-01-30 14:05:51

标签: ruby arrays split

我正在尝试使用Ruby v1.9.2处理数组,但它有一些奇怪的行为。

可以通过示例进行最佳解释:


案例1测试

@test1 = "image/bmp, image/gif, image/jpg".split(',')

Debug @ test1:

--- 
- image/bmp    # why this?!
- " image/gif"
- " image/jpg"

案例2测试

@test2 = ", image/bmp, image/gif, image/jpg".split(',')

Debug @ test2:

--- 
- ""           # why this?!
- " image/bmp"
- " image/gif"
- " image/jpg"

我需要什么

注意:我可以使用CASE 2 TEST,但我想做的事情做得更好。

我希望调试:

--- 
- " image/bmp"
- " image/gif"
- " image/jpg"

2 个答案:

答案 0 :(得分:2)

在测试用例1中,结果中“image / bmp”之前没有空格,因为原始字符串中“image / bmp”之前没有空格。

在测试用例2中,开头有一个空字符串,因为字符串以逗号开头,对于字符串中的每个分隔符,结果数组中都有一个字符串,包含在该分隔符之前的字符串(在此处case表示空字符串)。

如果你想要显示的结果,你可以在源字符串中的“image / bmp”之前添加一个空格(但没有逗号)。或者,您可以按/, */拆分,然后在每个字符串前面添加一个空格。虽然坦率地说我不明白为什么你想在每个字符串之前留一个空格。

答案 1 :(得分:1)

>> ", image/bmp, image/gif, image/jpg".split(/\s*,\s*/).select{|x| x!=""}
=> ["image/bmp", "image/gif", "image/jpg"]