文字列を加工するメソッドを学ぼう

学習の目標

本章では、以下の内容を学習します。

  • 文字列の前後の空白を除去するstripメソッドの使い方を理解する
  • 文字列内の特定のパターンを置換するgsubメソッドの活用方法を習得する
  • 文字列を区切り文字で分割するsplitメソッドの使い方を学ぶ
  • これらのメソッドを組み合わせて実践的な文字列処理を行う方法を理解する
  • 文字列加工のテクニックを活用してデータを整形する方法を習得する

はじめに

プログラミングをしていると、文字列を扱う場面が非常に多くあります。例えば、ユーザーからの入力データを処理したり、ファイルから読み込んだテキストを加工したり、外部サービスとのデータのやり取りをしたりする際に、文字列の加工が必要になります。

Rubyには、文字列を簡単に加工するための様々なメソッドが用意されています。これらのメソッドを使いこなせると、複雑な文字列処理も簡潔に書くことができ、コードの可読性も向上します。

本章では、特に頻繁に使われる文字列加工のメソッドであるstripgsubsplitの使い方を学んでいきましょう。これらのメソッドは、データの前処理やクリーニングなど、実際のプログラミングで非常に役立ちます。

前後の空白を除去するstripメソッド

stripメソッドの基本

文字列の前後に不要な空白(スペース、タブ、改行など)がある場合、それらを除去するにはstripメソッドを使います。このメソッドは、文字列の先頭と末尾の空白文字を取り除いた新しい文字列を返します。

VS Codeでstring_methods.rbというファイルを作成し、以下のコードを入力してみましょう。

# 前後に空白がある文字列を作ります
text = " Hello World! "
puts "元の文字列: 「#{text}」"
# stripで前後の空白を除去します
stripped_text = text.strip
puts "strip後の文字列: 「#{stripped_text}」"

このプログラムを実行すると、以下のような結果が表示されます。

元の文字列: 「 Hello World! 」
strip後の文字列: 「Hello World!」

stripメソッドは、文字列の先頭と末尾にある空白文字(スペース、タブ、改行など)をすべて取り除きます。文字列の途中にある空白は除去されません。

前後どちらかの空白だけを除去する

文字列の先頭(左側)の空白だけを除去したい場合はlstripメソッド、末尾(右側)の空白だけを除去したい場合はrstripメソッドを使います。

text = " Hello World! "
puts "元の文字列: 「#{text}」"
# 前(左側)の空白だけ除去するなら、lstripを使います
left_stripped = text.lstrip
puts "lstrip後の文字列: 「#{left_stripped}」"
# 後ろ(右側)の空白だけ除去するなら、rstripを使います
right_stripped = text.rstrip
puts "rstrip後の文字列: 「#{right_stripped}」"

実行結果は以下のようになります。

元の文字列: 「 Hello World! 」
lstrip後の文字列: 「Hello World! 」
rstrip後の文字列: 「 Hello World!」

これらのメソッドは、例えばユーザーから入力されたデータの前後に不要な空白がある場合に、その空白を取り除くのに便利です。データベースに保存する前にデータをクリーンにしたり、検索キーワードの前後の空白を除去したりするのによく使われます。

strip!メソッド

strip!メソッド(末尾に!が付いています)を使うと、元の文字列自体を変更して空白を除去します。

text = " Hello World! "
puts "元の文字列: 「#{text}」"
# strip!で元の文字列自体を変更します
text.strip!
puts "strip!後の文字列: 「#{text}」"

実行結果は以下のようになります。

元の文字列: 「 Hello World! 」
strip!後の文字列: 「Hello World!」

strip!メソッドは、元の文字列自体を変更します。変更がなかった場合(すでに空白がない場合)はnilを返します。同様に、lstrip!rstrip!メソッドも用意されています。

文字を置き換えるgsubメソッド

gsubメソッドの基本

文字列内の特定のパターン(文字や文字列)を別の文字列に置き換えるには、gsubメソッドを使います。gsubは「global substitution(全体置換)」の略で、指定したパターンに一致するすべての箇所を置き換えます。

# ハイフンで区切られた文字列を作ります
phone = "090-1234-5678"
puts "元の電話番号: #{phone}"
# ハイフンを削除します
clean_phone = phone.gsub("-", "")
puts "ハイフンを削除した電話番号: #{clean_phone}"

実行結果は以下のようになります。

元の電話番号: 090-1234-5678
ハイフンを削除した電話番号: 09012345678

この例では、電話番号からハイフン(-)を削除するためにgsubメソッドを使っています。第1引数に置き換え対象のパターン、第2引数に置き換える文字列を指定します。

複数のパターンを置換する

複数のパターンを置き換えたい場合は、gsubメソッドを連続して使うことができます。

text = "おはよう!おやすみ!"
puts "元のテキスト: #{text}"
# 複数のパターンを一度に置き換えることもできます
translated = text.gsub("おはよう", "Hello").gsub("おやすみ", "Goodnight")
puts "翻訳後のテキスト: #{translated}"

実行結果は以下のようになります。

元のテキスト: おはよう!おやすみ!
翻訳後のテキスト: Hello!Goodnight!

この例では、まず「おはよう」を「Hello」に置き換え、その結果に対してさらに「おやすみ」を「Goodnight」に置き換えています。このようにメソッドを連続して呼び出すことを「メソッドチェーン」と呼びます。

gsub!メソッド

gsub!メソッド(末尾に!が付いています)を使うと、元の文字列自体を変更して置換を行います。

phone = "090-1234-5678"
puts "元の電話番号: #{phone}"
# gsub!で元の文字列自体を変更します
phone.gsub!("-", "")
puts "ハイフンを削除した電話番号: #{phone}"

実行結果は以下のようになります。

元の電話番号: 090-1234-5678
ハイフンを削除した電話番号: 09012345678

gsub!メソッドは、元の文字列自体を変更します。変更がなかった場合(置換対象のパターンが見つからなかった場合)はnilを返します。

文字列を分割するsplitメソッド

splitメソッドの基本

文字列を特定の区切り文字(デリミタ)で分割して、配列に変換するにはsplitメソッドを使います。このメソッドは、区切り文字を基準にして文字列を分割し、分割された部分文字列からなる配列を返します。

# カンマで区切られた文字列を作ります
fruits = "りんご,バナナ,オレンジ"
puts "元の文字列: #{fruits}"
# カンマで分割します
fruit_array = fruits.split(",")
puts "分割後の配列: #{fruit_array.inspect}"
# 配列の各要素にアクセスできます
puts "1番目の果物: #{fruit_array[0]}"
puts "2番目の果物: #{fruit_array[1]}"
puts "3番目の果物: #{fruit_array[2]}"

実行結果は以下のようになります。

元の文字列: りんご,バナナ,オレンジ
分割後の配列: ["りんご", "バナナ", "オレンジ"]
1番目の果物: りんご
2番目の果物: バナナ
3番目の果物: オレンジ

この例では、カンマ(,)を区切り文字として指定して文字列を分割しています。分割された各部分が配列の要素となります。

inspectメソッドは、オブジェクトの内容を人間が読みやすい形で文字列にして返すメソッドです。配列の場合は、[要素1, 要素2, ...]のような形式で表示されます。

引数を省略した場合

splitメソッドの引数を省略すると、デフォルトで空白文字(スペース、タブ、改行など)を区切り文字として使用します。

# 空白で区切られた文字列を作ります
message = "Hello World Ruby"
puts "元の文字列: #{message}"
# 引数を省略すると、空白で分割します
words = message.split
puts "分割後の配列: #{words.inspect}"

実行結果は以下のようになります。

元の文字列: Hello World Ruby
分割後の配列: ["Hello", "World", "Ruby"]

引数を省略した場合、連続する空白文字は1つの区切りとして扱われます。例えば、「Hello World」(Helloの後に空白が2つ)という文字列を分割すると、["Hello", "World"]という配列が得られます。

様々な区切り文字での分割

splitメソッドでは、カンマや空白以外にも、任意の文字列を区切り文字として指定できます。

# スラッシュで区切られた日付文字列を作ります
date = "2024/01/03"
puts "元の日付: #{date}"
# スラッシュで分割します
date_parts = date.split("/")
puts "分割後の配列: #{date_parts.inspect}"
puts "年: #{date_parts[0]}"
puts "月: #{date_parts[1]}"
puts "日: #{date_parts[2]}"

実行結果は以下のようになります。

元の日付: 2024/01/03
分割後の配列: ["2024", "01", "03"]
年: 2024
月: 01
日: 03

この例では、スラッシュ(/)を区切り文字として日付の文字列を分割しています。このように、splitメソッドは様々なフォーマットのデータを扱う際に役立ちます。

文字列加工メソッドの組み合わせ

実際のプログラミングでは、複数のメソッドを組み合わせて使うことがよくあります。文字列加工のメソッドも組み合わせることで、より複雑な処理を簡潔に書くことができます。

例えば、ユーザーから入力された文字列の前後の空白を除去し、特定の文字を置換した後に分割する、といった処理を考えてみましょう。

# ユーザー入力を想定した文字列(前後に空白があり、不要な記号が含まれている)
user_input = " Ruby, Python, Java; JavaScript "
puts "元の入力: 「#{user_input}」"
# 1. 前後の空白を除去
cleaned = user_input.strip
puts "空白除去後: 「#{cleaned}」"
# 2. セミコロンをカンマに置換
standardized = cleaned.gsub(";", ",")
puts "セミコロン置換後: 「#{standardized}」"
# 3. カンマで分割して配列に変換
languages = standardized.split(", ")
puts "分割後の配列: #{languages.inspect}"

実行結果は以下のようになります。

元の入力: 「 Ruby, Python, Java; JavaScript 」
空白除去後: 「Ruby, Python, Java; JavaScript」
セミコロン置換後: 「Ruby, Python, Java, JavaScript」
分割後の配列: ["Ruby", "Python", "Java", "JavaScript"]

この例では、まずstripメソッドで前後の空白を除去し、次にgsubメソッドでセミコロンをカンマに置換し、最後にsplitメソッドでカンマとスペースで分割しています。

メソッドチェーンを使って、より簡潔に書くこともできます。

user_input = " Ruby, Python, Java; JavaScript "
puts "元の入力: 「#{user_input}」"
# メソッドチェーンで一連の処理を行う
languages = user_input.strip.gsub(";", ",").split(", ")
puts "処理後の配列: #{languages.inspect}"

実行結果は同じになります。

元の入力: 「 Ruby, Python, Java; JavaScript 」
処理後の配列: ["Ruby", "Python", "Java", "JavaScript"]

このように、複数のメソッドを連結することで、コードをより簡潔に書くことができます。

まとめ

本章では、Rubyにおける文字列加工のメソッドについて学びました。以下のポイントを理解できたことと思います。

  • stripメソッドを使うと、文字列の前後の空白を除去できる(lstriprstripのバリエーションもある)
  • gsubメソッドを使うと、文字列内の特定のパターンを別の文字列に置き換えることができる
  • splitメソッドを使うと、文字列を特定の区切り文字で分割し、配列に変換できる
  • これらのメソッドを組み合わせることで、複雑な文字列処理も簡潔に書くことができる
  • メソッドの末尾に!を付けたバージョン(例:strip!gsub!)は、元の文字列自体を変更する

これらのメソッドは、実際のプログラミングで頻繁に使用されます。特にユーザーの入力データを処理したり、外部データを読み込んだりする際に、データのクリーニングや整形に役立ちます。

文字列操作は日常的なプログラミングで非常に重要な部分ですので、これらのメソッドの使い方をしっかりと理解し、適切に使い分けられるようになりましょう。

このセクションは有料サブスクリプションへの登録、またはログインが必要です。完全なコンテンツにアクセスするには、料金ページ(/pricing)をご覧ください。購入済みの場合は、ログインしてください。

Starterプランでより詳しく学習

この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。

作成者:とまだ
Previous
真偽値を返すメソッドを使いこなそう