2014-06-21 250 views
0

假設您的字符串爲"Hi"。你如何得到值爲8,9"H"是字母表的第8個字母,而"i"是第9個字母)。然後說,添加1到那些整數,並使其910,然後可以重新回到字符串"Ij"?可能嗎?將字符串轉換爲整數

+1

想知道如何處理邊緣情況?如果你有「Yz」,你會期望新的字符串是什麼? – SteveTurczyn

回答

2

使用ord獲取ASCII索引,並chr將其恢復。

'Hi'.chars.map{|x| (x.ord+1).chr}.join 
0

您還可以使用codepoints方法從字符串創建字符序數的枚舉。

string = "Hi" 

string.codepoints.map{|i| (i + 1).chr}.join 
=> "Ij" 
3

注意卡里Swoveland已經給出了這個問題的評論的一樣的答案。

通過數字8和9不可能做到這一點,因爲這些數字不包含有關字母大小寫的信息。但是,如果你不通過數字8和9,而是更有意義的號碼,如ASCII碼字符串轉換堅持,那麼你可以做這樣的:

"Hi".chars.map(&:next).join 
# => "Ij" 
+0

我發佈了一個解決方案,下面是OP所需的解決方案。如果你想做更大的轉變,調整參數旋轉。當然,我並不喜歡問題中提到的8和9,但答案非常符合我認爲的問題的精神。 –

0

保留的情況下,並假設你想環繞在「Z」:

upper = [*?A..?Z] 
lower = [*?a..?z] 
LOOKUP = (upper.zip(upper.rotate) + lower.zip(lower.rotate)).to_h 
s.each_char.map { |c| LOOKUP[c] }.join 
#=> "Ij"