我使用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
我该如何编写这样的功能?
答案 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/
那是因为"*"
在正则表达式中具有特殊含义。因此,我把它放在一个字符类中,它没有特殊含义。