2014-06-21 64 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"