如果我加1,将字符'A'转换为'B'

时间:2017-06-06 13:33:54

标签: ruby

假设您有一个字符/字符串,“A”。

如果将“1”添加到“A”,您会将其转换为“B”。如果我添加'2',它应该转换为'C',依此类推......

3 个答案:

答案 0 :(得分:2)

您可以通过.ord

往返
'a'.ord # => 97
'a'.ord + 2 # => 99
('a'.ord + 2).chr # => "c"
('A'.ord + 5).chr # => "F"

答案 1 :(得分:1)

也许是这样的?:

$ctrl.selected = $ctrl.foo;

答案 2 :(得分:0)

进一步Sergio's answer,你可以隔离字母 - 并使用模数。

class String
  def plus n
    case self
    when ('a'..'z')
      (((ord - 97 + n) % 26) + 97).chr            #ord means self.ord
    when ('A'..'Z')
      (((ord - 65 + n) % 26) + 65).chr
    else
      raise "single-letters only"
    end
  end
end

'a'.plus 2 #=> 'c'
'z'.plus 1 #=> 'a'
'A'.plus 0 #=> 'A'
'Z'.plus 9 #=> 'I'
'/'.plus 1 #=> test.rb:9:in `plus': single-letters only (RuntimeError)

您的问题尚不清楚,但正如Stefan的评论所暗示的那样,您可能需要'A' + 1 #=> 'B'符号。 Ruby允许覆盖String#+。但不要这样做,这只是为了告诉你,你可以:

class String
  def +(n)
   #code as above...
  end
end

然后通过语法糖,你可以做:

'a' + 2 #=> 'c'
'z' + 1 #=> 'a'
'A' + 0 #=> 'A'
'Z' + 9 #=> 'I'
'/' + 1 #=> test.rb:9:in `plus': single-letters only (RuntimeError)