1

似乎String#to_i只有当数字在字符串中领先时才有效。

作品:

"123acb".to_i #=> 123

不起作用,但我正在努力完成:

"abc123def".to_i #=> 123

我一直在寻找一种内置的方法来做到这一点,但我还没有找到。我唯一的选择是使用正则表达式吗?

  • 编辑 - 哇!很多不错的选择!顺便说一句,是否有任何具体原因to_i只处理领先数字?
4

5 回答 5

4

做这样的事情怎么办?

"abc123def".gsub(/\D/, '').to_i
# => 123

如果你想在一个大字符串中处理多个数字,你可以这样做

"a22bc123de4f004".split(/\D/).reject(&:empty?).map(&:to_i)
# => [22, 123, 4, 004]
于 2013-09-27T06:41:10.380 回答
4

这是另一种方法,使用scan而不是split

>> "abc123def456ghi".scan(/\d+/).join.to_i
=> 123456

请注意,scan保持而split扔掉....

要回答实际问题“是否有内置方法可以做到这一点?” 您可以从Ruby String 类文档中看到没有,除非您将scan, split, to_i,delete和朋友视为“足够接近”内置。

于 2013-09-27T06:45:58.307 回答
4
"abc123def"[/\d+/].to_i
# => 123
于 2013-09-27T06:52:12.247 回答
3

另一个使用删除

"abc123def456ghi".delete("^0-9").to_i
# => 123456
于 2013-09-27T07:15:11.857 回答
2

下面的使用String#tr怎么样?

"abc123def456ghi".tr('a-z','').to_i
# => 123456
"abc123def456ghiA".tr('A-z','').to_i
# => 123456
于 2013-09-27T07:04:34.863 回答