16

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

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

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

4

7 回答 7

15

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

a[0].chr
于 2008-08-27T04:34:03.493 回答
7

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

于 2008-08-27T04:22:04.020 回答
6

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

于 2008-08-27T04:29:45.313 回答
5

总结一下:

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

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

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

我发现范围选择器是最容易阅读的。谁能谈谈它是否效率较低?

于 2008-09-02T02:26:30.193 回答
1

@克里斯

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

查看字符串 API

于 2008-08-27T04:31:17.447 回答
1

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

于 2008-08-27T05:10:25.200 回答
0

我认为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
于 2015-06-25T06:16:25.770 回答