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