如何在 ruby 中将字符串转换为 int

how convert string to int in ruby

我在使用后获得了一个字符串 number = sep[1].scan(/\w+/) 但稍后我需要将数字与其他数字进行比较。我知道当我使用 sep[1].scan(/\w+/) 时我会丢弃其他符号,但是如何将我的字符串数字转换为实数?

这个问题的解决方法是:用正则表达式; number 是一个长度为 1 的数组,所以我需要将 number[0] 转换为数组,如下所示:num_integer =number[0].to_i

您编写的代码只捕获了一个完整的单词,相当于 [a-zA-Z0-9_] 任意次数。

string.scan(/\w+/) 将扫描该词。但是如果你只想从单词中提取数字,只需使用 string.scan(/\d+/) 然后使用 .to_i 转换。如果您使用 \w+ 进行扫描,然后调用 .to_i,则可能会发生两件事

情况 1:以数字开头的字符串

在这种情况下,例如 "879random" 将 return 879.to_i 被调用时。 .to_i 方法从字符串的开头查找数字。它不会捕获字符串中随机分散的数字。如果起始不是数字,请看案例 2。

情况 2:不以数字开头的字符串

在这种情况下,无论您的字符串是什么,如果它以非数字开头,它总是 return 0。例如,"s729742384023041646891273948" 将 return 0.to_i 方法从字符串的开头开始对数字进行分组,直到找到非数字或结束。

所以最好用.scan(/\d+/)而不是.scan(/\w+/)

如果您确定它是一个有效的号码,您可以使用Kernel#Integer方法。否则会引发 ArgumentError。

Integer("123")  # 123
Integer("123xyz")  # `Integer': invalid value for Integer(): "123xyz" (ArgumentError)