假设你有字符串"Hi"
。如何获得8
的值,9
("H"
是字母表的第8个字母,"i"
是第9个字母)。然后说,将1
添加到这些整数并将其设为9
,10
然后可以将其返回到字符串"Ij"
中?有可能吗?
答案 0 :(得分:3)
注意 Cary Swoveland在对该问题的评论中已经给出了相同的答案。
通过数字8和9不可能这样做,因为这些数字不包含有关字母大小写的信息。但是如果你不坚持通过数字8和9转换字符串,而是更有意义的数字,如ASCII代码,那么你可以这样做:
"Hi".chars.map(&:next).join
# => "Ij"
答案 1 :(得分:2)
使用ord
获取ASCII索引,使用chr
将其恢复。
'Hi'.chars.map{|x| (x.ord+1).chr}.join
答案 2 :(得分:0)
您还可以使用codepoints
方法从字符串创建可枚举的字符序号。
string = "Hi"
string.codepoints.map{|i| (i + 1).chr}.join
=> "Ij"
答案 3 :(得分: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"