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

4

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


String有两个方法to_i用于转换为整数,to_f用于转换为浮点数。 - Yakov
使用\w+scan来提取一个单独的数字似乎有些奇怪。你的字符串是什么样的,期望的结果是什么? - Stefan
3个回答

3
这个问题的解决方案是:使用正则表达式;由于number是一个长度为1的数组,所以我需要将number[0]转换为数组,像这样:num_integer = number[0].to_i

1
你编写的代码只捕获整个单词,相当于 [a-zA-Z0-9_] 任意次数。 string.scan(/\w+/) 将扫描该单词。但如果您想从单词中提取数字,只需使用 string.scan(/\d+)/code>,然后使用 .to_i 进行转换。如果您使用 \w+ 进行扫描,然后调用 .to_i,可能会发生两件事:
情况1:字符串以数字开头
在这种情况下,例如 "879random" 在调用 .to_i 后将返回 879.to_i 方法从字符串的开头查找数字。它不会捕获字符串中随机分散的数字。如果开头不是数字,请查看情况2。
情况2:字符串不以数字开头
在这种情况下,如果字符串以非数字开头,无论字符串是什么,它始终会返回0。例如,"s729742384023041646891273948"将返回0。方法.to_i从字符串的开头开始分组数字,直到找到非数字或到达字符串末尾为止。
因此,最好使用.scan(/\d+/)而不是.scan(/\w+/)

0
如果你确定它是一个有效的数字,你可以使用Kernel#Integer方法。否则它会引发一个ArgumentError异常。
Integer("123")  # 123
Integer("123xyz")  # `Integer': invalid value for Integer(): "123xyz" (ArgumentError)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接