Ruby : 文字列内の文字をそのインデックス番号に置き換えます
概要
特定の条件が満たされた場合に文字列内の文字を置換したい。そこで、Ruby の API ドキュメントを調べて、 gsub 、 gsub! を見つけました。など同様の目的で。これをプログラムに実装したとき、エラーは発生しませんでしたが、望ましい出力も得られませんでした。
私がしようとしていたコードはこれです:
name.each_char { |c|
if name[c] == "a"
name.sub( name[c] , c )
puts "matched.... "
end
たとえば、huzefa という文字列があり、すべての文字をそのインデックス番号に置き換えたいとします。では、どうすればいいのでしょうか?簡単な例を挙げて詳しく説明してください。
解決策
ブロックを gsub に渡して、一致が発生したときに好きなことを行うことができます。
インプレースでそれを行うには、gsub を使用できます。方法。
name = "Amanda"
new_name = name.gsub("a") do |letter|
puts "I've met letter: " + letter
"*"
end
# I've met letter: a
# I've met letter: a
# => "Am*nd*"
インデックスを操作したい場合は、次のようなことができます。
new_name = name.chars.map.with_index do |c, i|
if i.odd?
"*"
else
c
end
end.join
#=> => "A*a*d*"
ここで c と i がブロックに渡されます。 c は文字、i はインデックスです。