【Ruby】文字列オブジェクトを徹底解説!

Ruby

文字列オブジェクトとは

文字列オブジェクトはRubyのオブジェクトの一つで文字を表現できるオブジェクトです。

Rubyで使用する文字や数字などのデータはオブジェクトという形でデータ化されます。
そのオブジェクト中の一つで文字を取り扱えるのが文字列オブジェクトです。

文字列オブジェクトを定義してみよう

文字列オブジェクトは「"(ダブルクォテーション)」で囲ってあげると定義できます。

ruby
1
name = "プログラマン"

また文字列オブジェクトはRubyで最初から定義されているStringクラスのインスタンスです。
ですので下記のような方法でも作成できます。

ruby
1
name = String.new("プログラマン")

newメソッドを使ってStringクラスのインスタンスを作り出しました。

Stringクラスのインスタンス
最初の方が簡単にかけるので、ただ単に「"」で囲って作成するのが一般的です。

文字列を連結してみよう

文字列同士は連結することが可能です。
その際は下記のように「+」で連結します。

ruby
1
"文字列オブジェクト" + "文字列オブジェクト"

実際はこのように使います。

連結
この時注意するのは文字列オブジェクト同士しか連結できないということです。
試しに文字列オブジェクトと数値オブジェクトを連結させてみましょう。

連結できない例
このようにエラーが発生し、連結できません。
それではこういったときにはどうしたら良いのでしょうか。

to_sメソッド

to_sメソッドは数値オブジェクトが使えるメソッドで、数値オブジェクトを文字列オブジェクトへと変換してくれるメソッドです。

ruby
1
2
3
4
5
6
7
p 20
20
=> 20

p 20.to_s
"20"
=> "20"

実際に使ってみましょう。

to_sメソッド
このようにエラーも出ず、しっかりと連結できましたね。

その他の連結方法

連結は「+」を使う以外にも「<<」メソッドを使用して連結することもできます。

ruby
1
2
3
4
5
name = "プログラ"
name << "マン"
p name
"プログラマン"
=> "プログラマン"

「<<」メソッドは破壊的メソッドと呼ばれ、メソッドを使用したオブジェクトの中身そのものを変更するメソッドです。
上の例ではnameという変数に再代入することなく、nameの中身を連結後の文字に変更できました。
ですが、「+」メソッドを使用して連結した場合は再代入が必要になります。

ruby
1
2
3
4
5
name = "プログラ"
name = name + "マン"
p name
"プログラマン"
=> "プログラマン"

文字列の中で変数を展開してみよう

文字列の中で変数を使用したい場合どうしたら良いでしょう?
そのまま変数を書いたら変数名が文字として扱われてしまいますよね。

そんな時は式展開を使います。
式展開の書き方は下記の通りです。

ruby
1
#{式}

「式」は文字列や数値だけでなく、変数やメソッド呼び出し、演算子式なども扱うことができます。
例えば変数を文字列で展開したいときには下記のように記述します。

ruby
1
2
3
4
5
name = "プログラマン"
string = "私の名前は#{name}で、#{100 - 80}歳です。"
p string
"私の名前はプログラマンで、20際です。"
=> "私の名前はプログラマンで、20際です。"

式展開を利用すれば「+」などで連結させるよりもコードを綺麗に書けます。

また文字列の定義では「"」ではなく「'(シングルクォテーション)」で囲って作成することもできます。
ただ「'」で囲った場合、式展開などの記述がそのままコードとして登録されてしまうので注意が必要です。

式展開

文字列オブジェクトが使えるメソッド

文字列オブジェクトには便利なメソッドがあらかじめ用意されています。
よく使うものを何個か紹介いたします。

length,sizeメソッド

length、sizeメソッドはどちらも文字列オブジェクトの文字数が返り値となるメソッドです。

ruby
1
2
3
4
5
6
7
8
name = "プログラマン"
p name.length
6
=> 6

p name.size
6
=> 6

どちらのメソッドも返り値は同じになるので、どちらを使っても問題ありません。

splitメソッド

splitメソッドは引数を区切り文字として文字列を分割し、配列を返すメソッドです。

ruby
1
2
3
name = "プログラマン"
name.split("グ")
> ["プロ", "ラマン"]

sliceメソッド

sliceメソッドは、文字列の中から引数にしたがって部分的に文字列を取り出すメソッドです。
引数には下記のように指定します。

ruby
1
2
3
4
5
6
7
8
9
10
11
name = "私の名前はプログラマンです。"

#slice(数値):指定した数値の場所にある文字が返る
p name.slice(0)
"私"
=> "私"

#slice(数値A, 数値B):A文字目からB文字目までの文字が返る
p name.slice(2, 9)
"名前はプログラマン"
=> "名前はプログラマン"

reverseメソッド

reverseメソッドは文字列の中身の文字の順番を反転させ、新しい文字列を返すメソッドです。

ruby
1
2
3
name = "プログラマン"
name.reverse
=> "ンマラグロプ"

replaceメソッド

replaceメソッドは文字列の中身を引数で指定した文字列に変換させるメソッドです。

ruby
1
2
3
4
5
name = "プログラマン"
name.replace("programan")
p name
"programan"
=> "programan"

chompメソッド

chompメソッドは文字列の末尾の改行を取り除いた文字列を返すメソッドです。
文字列を定義すると必ず末尾に改行が入ります。
それを取り除くために使用します。

chopメソッド

chopメソッドは文字列の末尾の文字を取り除いた文字列を返すメソッドです。

ruby
1
2
3
4
5
name = "プログラマン"
name = name.chop
p name
"プログラマ"
=> "プログラマ"

deleteメソッド

deleteメソッドは、引数で指定した文字を文字列の中から削除し、新しい文字列を返すメソッドです。

ruby
1
2
3
4
5
name = "プログラマン"
name = name.delete("ロ")
p name
"プグラマン"
=> "プグラマン"

capitalizeメソッド

capitalizeメソッドは先頭の小文字を大文字に変換した文字列を返すメソッドです。
先頭以外のアルファベットはすべて小文字にします。
アルファベットに使わないと意味がありません。

ruby
1
2
3
4
5
name = "programan"
name = name.capitalize
p name
"Programan"
=> "Programan"

downcaseメソッド

downcaseメソッドは、文字列中の大文字を小文字に変換し、新しい文字列を返すメソッドです。
アルファベットに使わないと意味がありません。

ruby
1
2
3
4
5
name = "PrograMan"
name = name.downcase
p name
"programan"
=> "programan"

upcaseメソッド

upcaseメソッドは、文字列中の小文字を大文字に変換し、新しい文字列を返すメソッドです。
アルファベットに使わないと意味がありません。

ruby
1
2
3
4
5
name = "PrograMan"
name = name.upcase
p name
"PROGRAMAN"
=> "PROGRAMAN"

swapcaseメソッド

swapcaseメソッドは、文字列中の小文字を大文字に変換し、大文字を小文字に変換した新しい文字列を返すメソッドです。
アルファベットに使わないと意味がありません。

ruby
1
2
3
4
5
name = "PrograMan"
name = name.swapcase
p name
"pROGRAmAN"
=> "pROGRAmAN"

このように文字列オブジェクトで使えるメソッドはStringクラスにあらかじめ用意されているので、非常に便利ですね!

まとめ

文字列オブジェクトはRubyのオブジェクトの中で文字を扱うことができるものであると覚えておきましょう!