2008-08-27 94 views
16

在Ruby中,试图打印出String的单个元素给我带来了麻烦。相反,看到每个人物的,我看到他们的ASCII值改为:Ruby - 将Integer转换为字符串

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

我看了网上却找不到任何办法让原来的“0”背出来的。我对Ruby有点新,我知道它必须是简单的东西,但我似乎无法找到它。

回答

15

或者你可以整数转换成它的字符值:

a[0].chr 
7

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

6

我相信这是Ruby 1.9的变化,使得 “ASDF”[2]产生 “d”,而不是字符代码

1

的[,]运算符返回一个字符串返回到你,它是一个字符串操作,其中的[]操作符返回字符,其打印出来时,红宝石就像一个数字。

5

总结:

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

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

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

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

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