目次(まとめ)

◾️ gsubメソッドを使って、任意の文字列を置き換える

◾️ 関連記事

こんにちは、みっちゃんです。

Rubyを使ってプログラミングしているんだけど、与えられた文字列の中で置き換えたい文字があります。どうやったら文字の置換をすることができますか?

文字列の置換は、"gsub" メソッドを使用することで可能です。

今回の記事では、テキストファイルを読み込んで、文字列を置き換える方法を紹介します。

gsubメソッドを使って、任意の文字列を置き換える

ここでは、以下のようなテキストファイル(input.txt)をRubyで読み込むことを考えます。

Government of the people, by the people, for the people.

これを読み込んで標準出力するRubyのスクリプトは、以下のような例(sample-1.rb)になります。

# sample-1.rb

infile = open("input.txt", "r")   # テキストファイル "input.txt" を、読み込み (read) モードで開いています

while line = infile.gets   # 読み込みモードで開いたファイルを、1行ずつ読み込んでいく繰り返し文です
  puts line
end   # 繰り返しはここまで

infile.close   # 開いていたファイルを閉じる

これをターミナル上などで実行すると、以下のように出力されます(初心者の方で実行方法がわからない方は、こちらの記事をご参照ください)。

$ ruby sample-1.rb
Government of the people, by the people, for the people.

ちなみに、"Government of the people, by the people, for the people." とは、アメリカ合衆国の大統領として有名なエイブラハム・リンカーンが残した言葉です。

意味としては、"人民の、人民による、人民のための政治" となります。

ここでは、"people" という文字列を "ant(アリ)" に置き換えて、"アリの、アリによる、アリのための政治" にしてみます。

Rubyでは、"gsub" メソッドを使うことで文字列置換が可能です。

# sample-2.rb

infile = open("input.txt", "r")

while line = infile.gets
  line.gsub!("people", "ant")
  puts line
end

infile.close

以前の記事でも紹介したように、Rubyには、"破壊的メソッド" と "非破壊的メソッド" の2種類が準備されていますが、上のスクリプトでは、破壊的メソッド "gsub!" を使っています。

いま "line" という変数には、ファイルから読み込んだ文字列が入っているのですが、その変数に対して "gsub!" メソッドを適用して「"people" を "ant" に置き換える」処理をしています。

実行すると、以下のようになります。

$ ruby sample-2.rb
Government of the ant, by the ant, for the ant.

非破壊的メソッドである "gsub" を使いたければ、以下のように実行することも可能です。

# sample-3.rb

infile = open("input.txt", "r")

while line = infile.gets
  replaced_line = line.gsub("people", "ant")
  puts replaced_line
end

infile.close

関連記事