Say you have the string "Hi". How do you get a value of 8, 9 ("H" is the 8th letter of the alphabet, and "i" is the 9th letter). Then say, add 1 to those integers and make it 9, 10 which can then be made back into the string "Ij"? Is it possible?
use ord to get the ASCII index, and chr to bring it back.
'Hi'.chars.map{|x| (x.ord+1).chr}.join
Note Cary Swoveland had already given a same answer in a comment to the question.
It is impossible to do that through the numbers 8 and 9 because these numbers do not contain information about the case of the letters. But if you do not insist on converting the string via the number 8 and 9, but instead more meaningful numbers like ASCII code, then you can do it like this:
"Hi".chars.map(&:next).join
# => "Ij"
You can also create an enumerable of character ordinals from a string using the codepoints method.
string = "Hi"
string.codepoints.map{|i| (i + 1).chr}.join
=> "Ij"
Preserving case and assuming you want to wrap around at "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"
来源:https://stackoverflow.com/questions/24337461/strings-to-integers