删除前导零Ruby

时间:2015-10-27 15:18:18

标签: arrays ruby

我想从number.i中删除前导零。想要使用Integer(i)而不是i.to_i来拯救nil。

"011,12,h,013,14".split(",").map{|i| Integer i rescue nil}

我想得到:

[11,12,nil,13,14]

相反,我得到了这个:

[9, 12, nil, 11, 14]

可能是什么问题?

2 个答案:

答案 0 :(得分:8)

来自$project

  

整数(arg,base = 0)→整数

     

[...]   如果 arg String,当 base 被省略或等于零时,基数指示符(00b和{{ 1}})很荣幸。   [...]

您省略 base ,因此字符串中的前导0x表示转换为整数时使用base-8(或documentation of Kernel#Integer)。 octal以相同的方式工作(0产生011 == 9)。如果不应遵守这些前缀/基数指示符,并且字符串表示的整数应被视为基数10(或Integer literals),则为{em> base 传递true

10

答案 1 :(得分:3)

Integer('011')
=> 9

您可以使用to_i方法

"011,12,h,013,14".split(",").map{|i| i.to_i rescue nil}
=> [11, 12, 0, 13, 14]

"011,12,h,013,14".split(",").map{|i| i.to_i == 0 ? nil : i.to_i}
[11, 12, nil, 13, 14]

"0,011,12,h,013,14".split(",").map{|i| (i =~ /\D/).nil? ? i.to_i : nil }
 [0, 11, 12, nil, 13, 14]