【问题标题】:Ruby - Convert Integer to StringRuby - 将整数转换为字符串
【发布时间】:2025-11-28 01:55:01
【问题描述】:

在 Ruby 中,试图打印出 String 的各个元素会给我带来麻烦。我没有看到每个字符,而是看到了它们的 ASCII 值:

>> a = "0123"
=> "0123"
>> a[0]
=> 48

我在网上查看过,但找不到任何方法可以让原来的“0”恢复原状。我对 Ruby 有点陌生,我知道它必须很简单,但我似乎找不到它。

【问题讨论】:

    标签: ruby arrays


    【解决方案1】:

    或者您可以将整数转换为其字符值:

    a[0].chr
    

    【讨论】:

      【解决方案2】:

      你想要 a[0,1] 而不是 a[0]。

      【讨论】:

        【解决方案3】:

        我相信这在 Ruby 1.9 中发生了变化,“asdf”[2] 产生“d”而不是字符代码

        【讨论】:

          【解决方案4】:

          总结一下:

          此行为将在 1.9 版本中消失,其中返回字符本身,但在以前的版本中,尝试通过字符位置引用字符串的单个字符将返回其字符值(因此 "ABC"[ 2] 返回 67)

          有许多方法可以从字符串返回一系列字符(请参阅字符串 slice method 上的 Ruby 文档)以下所有方法都返回“C”:

          "ABC"[2,1] 
          "ABC"[2..2]
          "ABC".slice(2,1)
          

          我发现范围选择器最容易阅读。任何人都可以谈谈它是否效率较低?

          【讨论】:

            【解决方案5】:

            @Chris,

            这就是为 String 类定义 [] 和 [,] 的方式。

            查看String API

            【讨论】:

              【解决方案6】:

              [,] 操作符返回一个字符串给你,它是一个子字符串操作符,其中 [] 操作符返回的是 ruby​​ 在打印时将其视为数字的字符。

              【讨论】:

                【解决方案7】:

                我认为each_charchars 更好地描述了您想要的内容。

                irb(main):001:0> a = "0123"
                => "0123"
                irb(main):002:0> Array(a.each_char)
                => ["0", "1", "2", "3"]
                irb(main):003:0> puts Array(a.each_char)
                0
                1
                2
                3
                => nil
                

                【讨论】: