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



我在使用后获得了一个字符串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:以数字开头的字符串

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

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

在这种情况下,无论您的字符串以非数字开头,它都将始终返回0。例如,"s729742384023041646891273948"将返回0.该方法.to_i从字符串的开头开始对数字进行分组,直到找到非数字或直到末尾。

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

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

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

最新更新