【问题标题】:how convert string to int in ruby如何在ruby中将字符串转换为int
【发布时间】:2021-02-18 13:25:51
【问题描述】:

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

【问题讨论】:

  • String 有方法to_i 可以转换为Integerto_f 可以转换为Float
  • 使用\w+scan 提取单个数字似乎很奇怪。你的字符串是什么样子的?预期的结果是什么?

标签: ruby string integer


【解决方案1】:

这个问题的解决方法是:用正则表达式; number 是一个长度为 1 的数组,所以我需要将 number[0] 转换为数组,如下所示:num_integer =number[0].to_i

【讨论】:

    【解决方案2】:

    您编写的代码只捕获了一个完整的单词,相当于[a-zA-Z0-9_] 任意次数。

    string.scan(/\w+/) 将扫描该单词。但是,如果您只想从单词中提取数字,只需使用string.scan(/\d+/),然后使用.to_i 进行转换。如果您使用\w+ 进行扫描,然后如果您调用.to_i,则可能会发生两种情况

    案例1:以数字开头的字符串

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

    案例2:字符串不以数字开头

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-12
        • 2018-05-08
        • 1970-01-01
        • 1970-01-01
        • 2022-06-27
        • 2011-04-28
        • 2015-01-29
        相关资源
        最近更新 更多