Techioz Blog

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 はインデックスです。