我在使用后获得了一个字符串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)