スライドショー

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を独学で頑張っているけど先が見えない方のために

いや、おれは違うぞ。先のキャリアもしっかり見えてるし、独学の成果も出てきている

そんな方であれば、これから先の話は必要ないでしょう。そっとページの閉じるボタンを押しましょう。

しかし、「先が見えない」と心の底では勘付いているそこの奥さん。この先を読み進めて、一緒に課題を深堀りしていきましょう。

なぜ「先が見えない」という不安や悩みを抱えてしまうのか

さて、「一寸先は闇だ・・・」とお悩みを抱えている方に、なぜ独学でRubyを勉強しているにもかかわらず、そのような現状を抱えてしまうのか、一緒に考えていきましょう。

先が見えない現状を踏まえ、課題として考えられるものは以下のどれかに該当するでしょう。

  • プログラミングの上達が見えない
  • プログラミングを継続できない気がする
  • プログラミングスキルを習得した姿がイメージできない
  • プログラミングスキルを活かした仕事を獲得するイメージができない

これらのどれかに該当することによって、「なんとなくプログラミング学習をしている」という状態になってしまいます。

これらの要因は、三日坊主になる理論と同じなんですが、「プログラミング学習をしなきゃ」とプログラミング学習を頑張ってしまっている状態になってしまっています。

受験勉強をやった経験のある方なら頭がもげるほどに首を縦に振ってしまう方も多いのですが、「今日も5時間勉強するぞ」や「今日はこの章を終わらすぞ」というように、学習を進めることに意識が行き過ぎてしまうと、ある程度学習を継続した後に「先が見えない・・・」となってしまいます。

未来に光を当て、プログラミング学習を「成果が出るもの」にするために

先ほど、「なぜ先が見えないという悩みや不安を抱えてしまうのか」という疑問に対しての答えを示していきました。

これらの課題というのは、独学をしていれば9割の方がぶつかってしまう壁だそうで、いわば、あるあるの現象なのです。

独学をしていて、「なんか前に進めていないぞ」と感じるのはこのせいなんですね。甘く見がちですが、非常にやっかい。

これがさらにやっかいさを極めているのは、上記に挙げた課題のほとんどが、1人で解決できないものばかりだからです。

実は、これらのほとんどが経験者に助けてもらいながら解決しないと、すぐに違う方向へと流れてしまいます。

そう言い切れるのは、以前の私もそうだったからです。

エンジニアやプログラマー関連のキャリアに詳しい方や現役のエンジニアに相談しながら修正を加え、学習を実践して今があります。

そうは言っても、周りにそういう人がいないし・・・

という方もいるでしょう。そういう時にこそ、プログラミングスクールの無料体験レッスンを利用するのです。

営業をかけられて時間の無駄に終わるでしょ?

という考えに辿りついてしまいますよね。結論から言うと弊社では、そういった強引な営業等を行うことはありませんので、安心して受講できます。

「プログラミング学習の先ある未来」を光で明るく照らすには、弊社の無料体験レッスンがぴったりだと断言できます。それくらい無料体験レッスンに自信を持っているのです。

さらに、無料体験レッスンには以下の3大特典もついてきます!

  • 「最短1ヶ月で開発ができる学習方法」電子書籍(非売品)
  • 効率的なオリジナル学習カリキュラム
  • 未経験の転職(フリーランス)を可能にするキャリアサポート

上記の特典だけでも他のスクールにはないポイントだと自信を持っている無料体験レッスン特典です。

ただプログラミング学習をする毎日から、ワクワクしながらプログラミング学習できる毎日に変える体験を一度でいいのでしてみませんか?

無料体験レッスン予約はこちら

まとめ

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

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

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

佐野裕史

佐野裕史

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

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

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

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

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説