我想从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]
可能是什么问题?
答案 0 :(得分:8)
来自$project
:
整数(arg,base = 0)→整数
[...] 如果 arg 是
String
,当 base 被省略或等于零时,基数指示符(0
,0b
和{{ 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]