2009-05-01 4 views
2

エンコードされた文字列内の各要素の後続部分を探したいと思います。たとえば、K→M A→Cなど。Ruby String Translation

string.each_char do |ch| 
    dummy_string<< ch.succ.succ 
end 

しかし、この方法はy→aaを変換します。

Pythonのmaketrans()のようなRubyにはメソッドがありますか?

答えて

9

あなたはString#trをお探しですか? some_string.tr('a-zA-Z', 'c-zabC-ZAB')

+0

zの後には何ですか?それをどのように解釈するのですか? – unj2

+0

基本的には、文字a-zは文字c-z、a、bで置き換えられることを意味します。範囲c-zは2文字短いので、明らかに余分な文字を指定することができます。 まだ、それは非常に奇妙な構文のようです。ニート。 – Burke

0

私には分かりませんが、Rubyのやり方では、ブロックを正規表現関数に渡すことが関係していると思います。

"ABCYZ".gsub(/\w/) { |a| a=="Z" ? "A" : a.succ } 
=> "BCDZA" 

編集:ここだけ大文字のために働くダム一つだMEH、ペストに耳を傾け、気にしないが、彼はスマートに聞こえます。

+0

いわゆるRubyの方法はありません。あなたはRubyであなたの道を歩くことができます - これはString#gsubまたはString#trかもしれません。 String#trはString#gsubよりもはるかに高速であることに注意してください。 – pts

+0

彼らはそれを「Rubyのやり方」とは呼んでいませんが、あなたがRubyの会議で部屋から笑ったり侮辱したりするRubyコードでできることは確かです。私は自分の信念のためにRubyミーティングで(物理的に)ヒットしてしまったので、「あなたはRubyであなたの道を歩くことができます」と同意しません。Rubyのプログラマーは他のグループと同じように彼らの文化を守ります。 – Ken

1
def successor(s) 
    s.tr('a-zA-Z','c-zabC-ZAB') 
end 

successor("Chris Doggett") #"Ejtku Fqiigvv"