Rubyの文字列で使えるメソッド・使い方総まとめ

Rubyではさまざまなメソッドを使用して文字列(String)の操作が可能です。

「RubyのString(文字列)の使い方を知りたい」
「文字列の分割、検索、変換、置換、抽出、削除などを行いたい」

そんな方に向けて、この記事では文字列の使い方から基本的な操作方法について、解説していきます。

文字列の定義や使い方
文字列を比較する
文字列を分割する
文字列を検索・調査する
文字列を変換・置換する
文字列の長さを調べる
文字列の連結・作成・追加
文字列の抽出・削除
文字列の繰り返し

この記事では文字列の基本から文字列で使えるさまざまなメソッドやその使い方について、まとめましたのでぜひ参考にしてください!

この記事の目次

文字列の定義

RubyのStringクラスは文字列を表すオブジェクトです。

Rubyで文字列を定置する方法は簡単です。

基本的には変数を定義してイコール(=)で指定した文字列を代入すればOKです。

文字列の指定はダブルクオーテーション("")で文字列を囲って定義する必要があります。

変数 = ”文字列”

実際に文字列の定義方法を見てみましょう

str1 = "samurai"
str2 = "engineer"

p str1
p str2

このプログラムを実行すると、以下のように出力されます。

samurai
engineer

次項からはそんなRubyの文字列について、さまざまな文字列操作のメソッドを紹介します!

比較

==(同じ文字列かどうか調べる)

文字列と文字列を比較するには「==」を使用します。

string_1 = "samurai"
string_2 = "samurai"
p string_1 == string_2
=> true

<, <=, >, >=(文字列の順番の比較)

文字列を辞書的な順番で比較します。

word_1 = "hot"
word_2 = "hotter"
word_3 = "hottest"

p word_1 < word_2 => true
p word_1 > word_2
=> false
p word_1 <= word_3 => true
p word_1 >= word_2
=> false

<=>(文字列の順番の比較)

word_1 = "hotter"
word_2 = "hot"
word_3 = "hottest"

p word_1 <=> word_2
=> 1
p word_2 <=> word_3
=> -1
p word_1 <=> word_3
=> -1

casecmp(大文字小文字を区別しない比較)

比較の結果は「<=>」メソッドと同じ。

word_1 = "hot"
word_2 = "hotter"
word_3 = "hot"

p word_1.casecmp(word_2)
=> -1
p word_1.casecmp(word_3)
=> 0

分割

split(文字列の分割)

文字列を分割して取得したい場合はsplitメソッドを使用します。

以下のサンプルではカンマ(,)区切りで文字列を取得しています。

string = "samraui, ruby, rails"
p string.split(",")
=> ["samraui", " ruby", " rails"]

partition(部分文字列で2つに分割)

指定した部分文字列で分割したい場合はpartitionメソッドを使用します。

string = "samurai"
p string.partition("u")
=> ["sam", "u", "rai"]

# 文字列がない場合は空白文字を用いて分割される
p string.partition("o")
=> ["samurai", "", ""]

rpartition(末尾から部分文字列で2つに分割)

指定した部分文字列で文字列の末尾から分割したい場合はrpartitionメソッドをを使用します。

string = "samurai"
p string.rpartition("u")
=> ["sam", "u", "rai"]

# 文字列がない場合は空白文字を用いて分割される
p string.rpartition("o")
=> ["", "", "samurai"]

検索、調査

empty?(空文字列か調べる)

指定した文字列が空文字列かどうか調べたい場合はempty?メソッドを使用します。

string_1 = "Hello"
p string_1.empty?
=> false

string_2 = ""
p string_2.empty?
=> true

start_with?(指定の文字列で始まっているか調べる)

string = "samurai, ruby"
p string.start_with?("sa")
=> true

end_with?(指定の文字列で終わっているか調べる)

string = "samurai, ruby"
p string.end_with?("by")
=> true

include?(部分文字列が含まれているか調べる)

string = "samurai, ruby"
p string.include?("ruby")
=> true

index(部分文字列の位置を調べる)

部分文字列が含まれていれば、開始位置のインデックスを整数で返す

string = "samurai, ruby"
p string.index("r")
=> 4   # 4文字目

# offsetを指定(○文字目から検索する)
string = "samurai, ruby"
p string.index("r", 5) # 5文字目から検索
=> 9 # 9文字目

rindex(末尾から部分文字列の位置を調べる)

string = "samurai, ruby"
p string.rindex("r")
=> 9   # 9文字目

# offsetを指定(末尾の○文字目から検索する)
string = "samurai, ruby"
p string.rindex("r", 5) # 末尾の5文字目から検索
=> 9 # 9文字目

変換、置換

reverse, reverse!(文字列の反転)

指定した文字列を反転して取得したい場合はreverseまたはreverse!メソッドを使用します。

string = "samurai"
p string.reverse
=> "iarumas"

# reverse!はレシーバ自身を反転させる
string = "samurai"
p string.reverse!
=> "iarumas"
p string
=> "iarumas"

capitalize, capitalize!(最初の文字を大文字にする)

最初の文字を大文字に、最初の文字以外は小文字にします。

string = "saMuraI, rUBy"
p string.capitalize
=> "Samurai, ruby"

swapcase, swapcase!(小文字を大文字に、大文字を小文字に変換)

string = "saMuraI, rUBy"
p string.swapcase
=> "SAmURAi, RubY"

replace(文字列を変更する)

指定した文字列でレシーバ自身を変更する。

string = "Samurai"
string.replace("Hello")
p string

downcase, downcase!(大文字を小文字にする)

string = "saMuraI, rUBy"
p string.downcase
=> "samurai, ruby"

upcase, upcase!(小文字を大文字にする)

string = "saMuraI, rUBy"
p string.upcase
=> "SAMURAI, RUBY"

# upcase!はレシーバ自身を変更する

squeeze, squeeze!(同じ文字の繰り返しを1つにまとめる)

string = "rrruuuubbbbbyy"
p string.squeeze
=> "ruby"

# 引数を指定した場合は、その文字だけまとめる
string = "rrruuuubbbbbyy"
p string.squeeze("r")
=> "ruuuubbbbbyy"

tr, tr!(特定の文字を置換)

s = "samurai"
p s.tr("sa", "cu") # sをcに、aをuに置換する
=> "cumurui"

tr_s, tr_s!(特定の文字を置換して1つにまとめる)

string = "AAAABBCCCDDDD"
p string.tr_s("A-I", "1-9") # AからIを1から9に置き換えて重複をまとめる
=> "1234"

長さ

size(文字数(バイト数)を返す)

string = "Samurai"
p string.size
=> 7

length(文字数(バイト数)を返す)

string = "Samurai"
p string.length
=> 7

count(文字列中の特定の文字を数える)

string = "Samurai"
p string.count("a")
=> 2

連結、作成、追加

+(文字列の連結)

string = "Samurai"
p string + " World"
=> "Samurai World"

%(書式付き文字列の作成)

number = 10.0 / 3
p "%.4f" % num

*(繰り返し文字列の作成)

string = "Samurai"
p string * 5
=> "SamuraiSamuraiSamuraiSamuraiSamurai"

<<(文字列の追加)

string = "Samurai"
string << ", World" p string => "Samurai, World"

succ, succ!(「次の文字列」を作る)

s = "abc"
puts s.succ
s = "abc123"
puts s.succ

next, next!(「次の文字列」を作る)

succの別名。

string = "abcdef"
p string.next
=> "abcdeg"

string = "abcdef12345"
p string.next
=> "abcdef12346"

insert(指定の位置に文字列を挿入)

string = "hello, samurai"
string.insert(7, "ruby ")
p string
=> "hello, ruby samurai"

string.insert(-8, "school ")
p string
=> "hello, ruby school samurai"

抽出、削除

chomp, chomp!(末尾の改行を取り除く)

string_1 = "samurai\n"
string_2 = "samurai\r\n"
string_3 = "samurai\r"
p string_1.chomp
=> "samurai"
p string_2.chomp
=> "samurai"
p string_3.chomp
=> "samurai"

chop, chop!(末尾の文字を取り除く)

string = "samurai"
p string.chop
=> "samura"

delete, delete!(文字列中の特定の文字を削除)

string = "hello, samurai"
p string.delete("l")
=> "heo, samurai"

lstrip, lstrip!(先頭の空白を取り除く)

string = "    hello, samurai"
p string.lstrip
=> "hello, samurai"

rstrip, rstrip!(末尾の空白を取り除く)

string = "hello, samurai  \r\n"
p string.rstrip
=> "hello, samurai"

strip, strip!(先頭と末尾の空白を取り除く)

string = "  hello, samurai  \r\n"
p string.strip
=> "hello, samurai"

slice(部分文字列の取り出し)

string = "samurai"
p string.slice(1, 3)   # 2番目から3文字分
=> "amu"

string = "hello, samurai"
p string.slice(7..10)  # 7文字目から10文字目まで
=> "samu"

slice!(部分文字列の削除)

string = "hello, samurai"
p string.slice!(1)
=> "e"
p string
=> "hllo, samurai"

chars(1文字ずつ取り出すRuby 1.8.7)

string = "さむらい"
p string.chars
=> ["さ", "む", "ら", "い"]

chr(最初の文字を取り出すRuby 1.9)

string = "さむらい"
p string.chr
=> "さ"

clear(文字列を空にするRuby 1.9)

string = "Hello"
string.clear
p string
=> ""

繰り返し

each_line(1行ずつ取り出す)

文字列を改行文字で分割して1行ずつ取り出す。

string = "line1\n line2 \r\n line3 \r line4"
string.each_line {|line| p line.chomp }
=>
"line1"
" line2 "
" line3 \r line4"  # "\r"はデフォルトでは改行文字と見なされない

lines(1行ずつ取り出す)

string = "line1\n line2 \r\n line3 \r line4"
string.lines {|line| p line.chomp }
=>
"line1"
" line2 "
" line3 \r line4"

upto(指定の文字列まで「次の文字列」を繰り返す)

"ruby".upto("rucc") {|s| print s, ' ' }
=> ruby rubz ruca rucb rucc

その他

center(中央寄せ)

string = "samurai"
p string.center(18) #長さを引き数で指定する。空白文字で中央寄せされる
=> "     samurai      "
p string.center(18, "-") # 第二引数を指定すると、その文字で中央寄せされる
=> "-----samurai------"

rjust(右寄せ)

string = "samurai"
p string.rjust(18)
=> "           samurai"

p string.rjust(18, "-")
=> "-----------samurai"

ljust(左寄せ)

string = "samurai"
p string.ljust(18)
=> "samurai           "

p string.ljust(18, "-")
=> "samurai-----------"

encoding(文字コード情報を得るRuby 1.9)

string = "さむらい"
p string.encoding
=> #

sum(チェックサムの値を返す)

文字列の各バイトの整数を合計し、下位ビットを取り出す。

string = "さむらい"
p string.sum
=> 1972

ord(最初の文字のコードポイントを返す)

string = "さむらい"
p string.ord
=> 12373

まとめ

ここでは、RubyでString(文字列)を扱う方法や便利なメソッドについて解説しました。

文字列の操作はプログラミングにおいて、最も基本的な処理の1つとなりますので、使い方についてはしっかりと理解しておきましょう。

もし、文字列の操作方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

佐野裕史

佐野裕史

侍エンジニア塾インストラクター。
主に技術担当をしています。

【経歴】
力仕事、接客業、営業職など様々な業界を経てIT業界に参入。
IT未経験からスタートし、1ヶ月で仕事獲得に奇跡的に成功。
1年半後にフリーランスに転身。

Web開発を主に行っており、得意とするのはRails、Ruby。
【技術スキル】
Rails、Ruby、Swift、Java(Android)、JavaScript

【趣味、趣向】
麻雀
MTG(マジックザギャザリング)
ダーツ、卓球、野球、ボウリングなどの球技

【Facebookページ】
https://www.facebook.com/hiroshi.sano.7
【Twitter】
プログラミング講師@佐野裕史
自分でプログラミングができない人のために情報を発信しています。
お気軽にフォローください。