2008-08-27 63 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