文字列を操作してみよう

学習の目標

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

  • 文字列の作成方法を理解する
  • 文字列の連結方法を習得する
  • 式展開の使い方を学ぶ
  • 文字列の分割と結合の方法を理解する

はじめに

プログラムでは、文字や文章を扱う機会が多くあります。例えば、ユーザーに表示するメッセージや、入力されたデータの処理など、文字列操作はプログラミングの基本的なスキルの一つです。

本章では、Rubyで文字列を扱う基本的な方法を学びます。Rubyは文字列操作がとても便利で強力な言語なので、これらの機能をマスターすれば、様々なテキスト処理を簡単に行えるようになります。

文字列の作成

irbを起動して、文字列の作成方法を見ていきましょう。

Rubyでは、ダブルクォーテーション(")かシングルクォーテーション(')で文字を囲むと、文字列として扱えます。どちらを使っても基本的な文字列は作成できますが、後で説明するように、いくつかの重要な違いがあります。

irb(main):001:0> greeting = "Hello Ruby"
=> "Hello Ruby"
irb(main):002:0> message = 'Programming is fun'
=> "Programming is fun"

これらの例では、「Hello Ruby」と「Programming is fun」という文字列を作成して、それぞれgreetingmessageという変数に代入しています。文字列は、日本語や絵文字なども含めることができます。

式展開

ダブルクォーテーションを使うと、文字列の中に変数の値を埋め込めます。この機能を式展開と呼びます。式展開を使うと、複数の値を組み合わせて文字列を作ることが簡単になります。

irb(main):015:0> language = "Ruby"
=> "Ruby"
irb(main):016:0> puts "私は#{language}を勉強しています"
私はRubyを勉強しています
=> nil

#{変数名}という形で書くと、その部分が変数の値に置き換わります。これにより、変数の内容を文字列の中に簡単に組み込むことができます。

一方、シングルクォーテーションでは式展開は使えません。シングルクォーテーションで囲まれた文字列は、そのまま文字として解釈されます。

irb(main):017:0> puts '私は#{language}を勉強しています'
私は#{language}を勉強しています
=> nil

シングルクォーテーションを使った場合、#{language}という文字列がそのまま表示されてしまいました。これがダブルクォーテーションとシングルクォーテーションの大きな違いの一つです。

式展開のさらなる活用

式展開では、変数だけでなく、式(計算や関数)も埋め込むことができます。これにより、文字列の中で直接計算結果を表示することも可能です。

irb(main):020:0> puts "1 + 2 = #{1 + 2}"
1 + 2 = 3
=> nil
irb(main):021:0> puts "現在の時刻は#{Time.now}です"
現在の時刻は2023-01-15 14:30:45 +0900です
=> nil

このように、#{}の中には変数だけでなく、計算式やメソッド呼び出しなど、様々な式を書くことができます。これにより、動的に内容が変わる文字列を簡単に作成できます。

文字列の中で特殊な文字を使う

ダブルクォーテーションを使うと、文字列の中で改行やタブなどの特殊な文字(制御文字)を表現できます。これらは「エスケープシーケンス」と呼ばれ、バックスラッシュ(\)の後に特定の文字を続けることで表現します。

irb(main):003:0> puts "1行目\n2行目"
1行目
2行目
=> nil

この例では、\nを使って改行を表現しています。\nは「ニューライン」を意味し、その部分で改行が行われます。

シングルクォーテーションでは、このような特殊な文字は使えません。シングルクォーテーションで囲まれた文字列では、バックスラッシュと文字がそのまま文字として解釈されます。

irb(main):004:0> puts '1行目\n2行目'
1行目\n2行目
=> nil

この例では、\nがそのまま文字として表示されています。これがダブルクォーテーションとシングルクォーテーションのもう一つの大きな違いです。

よく使われる特殊文字

Rubyで使える主な特殊文字(エスケープシーケンス)は以下の通りです。これらを使うことで、文字列内に特殊な文字や制御文字を含めることができます。

  • \n - 改行
  • \t - タブ
  • \" - ダブルクォーテーション
  • \' - シングルクォーテーション
  • \\ - バックスラッシュ
irb(main):022:0> puts "タブ(\t)を使うと文字の間に空白が入ります"
タブ( )を使うと文字の間に空白が入ります
=> nil
irb(main):023:0> puts "引用符を表示: \"Rubyは素晴らしい\""
引用符を表示: "Rubyは素晴らしい"
=> nil

これらのエスケープシーケンスを使うと、通常は文字列の区切りとして使われる文字(例えば、ダブルクォーテーション)や、特殊な制御文字(タブや改行)を文字列の中に含めることができます。

文字列の連結

2つの文字列をつなぎ合わせる方法を見ていきましょう。文字列の連結は、複数の文字列から一つの文字列を作成する基本的な操作です。

まずは+記号を使う方法です。この方法は、数値の足し算と同じ記号を使いますが、文字列の場合は「連結」という意味になります。

irb(main):005:0> first = "Hello"
=> "Hello"
irb(main):006:0> second = "Ruby"
=> "Ruby"
irb(main):007:0> first + " " + second
=> "Hello Ruby"

この例では、firstsecondの間に空白文字(" ")を入れて連結しています。+演算子を使うと、複数の文字列を一つの式で連結できます。

次に<<演算子を使う方法です。この演算子は「追加」や「挿入」を意味し、文字列を別の文字列に追加します。

irb(main):008:0> message = "Hello"
=> "Hello"
irb(main):009:0> message << " " << "Ruby"
=> "Hello Ruby"

この例では、messageに空白文字を追加し、さらに"Ruby"を追加しています。<<演算子は複数回続けて使うことができます。

これら2つの方法には重要な違いがあります。その違いを理解することで、適切な場面で適切な方法を選べるようになります。

  • +演算子:新しい文字列を作成し、元の文字列は変更されません
  • <<演算子:元の文字列を直接変更します
irb(main):010:0> text = "Hello"
=> "Hello"
irb(main):011:0> text + " World"
=> "Hello World"
irb(main):012:0> text
=> "Hello"
irb(main):013:0> text << " World"
=> "Hello World"
irb(main):014:0> text
=> "Hello World"

この例では、最初に+演算子を使って「Hello」と「 World」を連結していますが、text変数の値は変わっていません。一方、<<演算子を使った後は、text変数の値が「Hello World」に変わっています。

この違いは重要です。+演算子は元の変数の値を変えないので、一時的に連結したい場合に使います。一方、<<演算子は元の変数の値自体を変更するので、変数に新しい文字列を追加していきたい場合に便利です。また、大量の文字列を連結する場合、<<演算子の方がメモリ効率が良いことがあります。

文字列の分割と結合

splitメソッドを使うと、文字列を特定の区切り文字で分割し、配列に変換できます。これは、カンマ区切りのデータやスペース区切りのテキストを処理する際に非常に便利です。

irb(main):018:0> "red,blue,yellow".split(",")
=> ["red", "blue", "yellow"]

この例では、カンマ(,)を区切り文字として文字列を分割し、「red」「blue」「yellow」という3つの要素を持つ配列を作成しています。splitメソッドの引数には、区切り文字を指定します。

逆に、joinメソッドを使うと、配列の要素を1つの文字列に結合できます。これはsplitの逆の操作と考えることができます。

irb(main):019:0> ["red", "blue", "yellow"].join("-")
=> "red-blue-yellow"

この例では、「red」「blue」「yellow」という配列の要素を、ハイフン(-)でつないで一つの文字列にしています。joinメソッドの引数には、要素間に挿入する文字列を指定します。

実用的な例

splitjoinを使った実用的な例を見てみましょう。これらのメソッドは、テキストデータの処理でよく使われます。

たとえば、CSVのようなフォーマットのデータを扱う場合、splitを使って各要素を分離し、処理したあとjoinで再構成するという手順がよく使われます。

irb(main):024:0> data = "apple,orange,banana"
=> "apple,orange,banana"
# 文字列を分割して配列に変換
irb(main):025:0> fruits = data.split(",")
=> ["apple", "orange", "banana"]
# 各要素を大文字に変換
irb(main):026:0> uppercase_fruits = fruits.map { |fruit| fruit.upcase }
=> ["APPLE", "ORANGE", "BANANA"]
# 配列を文字列に再結合
irb(main):027:0> uppercase_fruits.join(",")
=> "APPLE,ORANGE,BANANA"

この例では、カンマ区切りの果物のリストを分割し、各果物の名前を大文字に変換した後、再びカンマ区切りの文字列に戻しています。このような処理は、データの変換や整形でよく使われる手法です。

まとめ

本章では、Rubyでの文字列の基本的な操作方法を学びました。文字列はプログラミングの中で非常に重要なデータ型の一つで、これらの操作を理解することで、様々なテキスト処理が可能になります。

文字列の作成方法では、ダブルクォーテーションとシングルクォーテーションの違いを理解しました。ダブルクォーテーションは式展開や特殊文字をサポートする一方、シングルクォーテーションはそれらをサポートしません。

文字列の連結では、+演算子と<<演算子の違いを学びました。+演算子は新しい文字列を作成し、<<演算子は元の文字列を変更します。

また、splitメソッドとjoinメソッドを使って、文字列の分割と結合を行う方法も学びました。これらは、テキストデータの処理でよく使われる重要な操作です。

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

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

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

作成者:とまだ
Previous
数値を扱ってみよう