Rubyで末尾の改行文字を取り除く方法:chomp, chomp!

Ruby の chomp, chomp! メソッドを使って文字列の改行コードを取り除く方法について説明します。 表示されない文字である改行文字(改行コード)を入れます。また文字列の区切りの意味でも改行文字が使われます。

chompメソッドの使い方

chomp メソッドの書式は以下の通りです。文字列データのオブジェクトをレシーバーにして実行します。
文字列.chomp
以下のようなヒアドキュメントで書かれた文字列 str があるとします。
str = <<'EOS'
佐藤
田中
石井
EOS
この各行の最後に一斉に “様” を付けたいとします。 str の各行を1つずつ取り出す each_line を使い、変数 line に対して chomp メソッドを実行します。
str.each_line do |line|
  p line.chomp + "様"
end
このプログラムをコマンドラインで実行した場合の結果は以下のようになります。
"佐藤様"
"田中様"
"石井様"
chomp メソッドを使わない以下のようなプログラムを実行してみます。
str.each_line do |line|
  p line + "様"
end
同じくコマンドラインでプログラムを実行すると、以下のような結果となります。
"佐藤\n様"
"田中\n様"
"石井\n様"
\n は、改行コードです。これをブラウザで実行すると以下のように改行されて表示されます。
佐藤
様
田中
様
石井
様

chomp と chomp! を比較する

chomp! は、chomp メソッドの破壊的メソッドです。chomp メソッドは、実行されても文字列に影響は及ぼしませんが、chomp! メソッドは、文字列に影響を与えます。 まず、chomp メソッドを使ったコードを実行します。

str.each_line do |line|
  p line.chomp + "様"
  p line
end
その結果は、以下のようになります。変数 line の文字列が、chomp メソッドの実行後も変更されていないことがわかります。
"佐藤様"
"佐藤\n様"
"田中様"
"田中\n様"
"石井様"
"石井\n様"
次に、chomp! メソッドを実行します。

str.each_line do |line|
  p line.chomp! + "様"
  p line
end
その結果は、以下のようになります。chomp! は行末の改行を取り除き、変数 line そのものに影響を及ぼします。
"佐藤様"
"佐藤様"
"田中様"
"田中様"
"石井様"
"石井様"
chompには文字データの行末の改行文字を取り除く働きがあります。元の文字データには変化ありません。 chomp! は同様に行末の改行文字を取り除く働きがありますが、元のデータそのものを変えます。元のデータを変えても問題ないときや積極的に変えたいときには chomp! を使います。

イベント

2017/12/05(火)
Design Thinking Square