似乎String#to_i
仅在数字在字符串中前导时才有效。
使用:
"123acb".to_i #=> 123
不起作用,但我正在努力实现目标:
"abc123def".to_i #=> 123
我一直在寻找一种内置的方法来做到这一点,但我还没找到。我唯一的选择是使用正则表达式吗?
to_i
只处理前导号码有什么具体原因吗?答案 0 :(得分:4)
做这样的事情怎么样?
"abc123def".gsub(/\D/, '').to_i
# => 123
如果要在大字符串中处理多个数字,可以执行
"a22bc123de4f004".split(/\D/).reject(&:empty?).map(&:to_i)
# => [22, 123, 4, 004]
答案 1 :(得分:4)
这是另一种方法,使用scan
而不是split
:
>> "abc123def456ghi".scan(/\d+/).join.to_i
=> 123456
请注意,scan
会在split
被抛弃时保持......
要回答实际问题“是否有内置方法来执行此操作?”您可以从Ruby String class documentation看到没有,除非您将scan
,split
,to_i
,delete
和朋友视为“足够接近”内置。
答案 2 :(得分:4)
"abc123def"[/\d+/].to_i
# => 123
答案 3 :(得分:3)
使用delete
的另一个人"abc123def456ghi".delete("^0-9").to_i
# => 123456
答案 4 :(得分:2)
以下使用String#tr
怎么样?
"abc123def456ghi".tr('a-z','').to_i
# => 123456
"abc123def456ghiA".tr('A-z','').to_i
# => 123456