我在使用number = sep[1].scan(/\w+/)
后获得了一个字符串,但后来我需要将其与其他数字进行比较。我知道当我使用sep[1].scan(/\w+/)
时,我会丢弃其他符号,但如何将我的字符串数字转换为实际整数呢?
num_integer = number[0].to_i
。[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+/)
。
Kernel#Integer
方法。否则它会引发一个ArgumentError异常。Integer("123") # 123
Integer("123xyz") # `Integer': invalid value for Integer(): "123xyz" (ArgumentError)
String
有两个方法to_i
用于转换为整数,to_f
用于转换为浮点数。 - Yakov\w+
和scan
来提取一个单独的数字似乎有些奇怪。你的字符串是什么样的,期望的结果是什么? - Stefan