如何将字符串增加一个

时间:2016-08-25 15:17:57

标签: ruby-on-rails ruby string

我使用Ruby on Rails 4.2.7。我有一个字符串

possible_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_$1234567890 &*"

我想写一个函数,它将一个字符串递增,只包含上述字符串的字符。也就是说,如果我有

str = "AA"
increment_by_one("AA")

increment_by_one会产生

AB

并且类似地有一个字符串

str = "**"
increment_by_one("**")

会产生

AAA

我该如何编写这样的功能?

1 个答案:

答案 0 :(得分:0)

def next_str(str, possible_chars)
  ndx = possible_chars.index(str[-1])
  str[0..-2] +
  case ndx
  when possible_chars.size-1
    possible_chars[0]*(str[/[#{str[-1]}]+\z/].size + 1)
  else
    possible_chars[ndx+1]
  end
end

next_str("BC", possible_chars)
  #=> "BD" 
next_str("BC***", possible_chars)
  #=> "BC**AAAA" 

在第二个示例中,/#{str[-1]}+\z/将评估为/*+\z/,这会引发异常

/#{str[-1]}+\z/ RegexpError: target of repeat operator is not specified: /*+\z/

那是因为"*"在正则表达式中具有特殊含义。因此,我把它放在一个字符类中,它没有特殊含义。