💡 この記事でわかること
- 文字数の数え方(
length)と、バイト数との違い - 大文字・小文字変換(
upcase・downcase)、空白除去(strip)、置き換え(gsub・sub) - 一部を取り出す(
[])、含まれるか調べる(include?)方法 - 分割(
split)と連結(join)、数値の書式指定(%/format) - 覚えておくと便利な文字列メソッド早見表
1. 文字列操作とは?
文字列操作とは、
👉 文字列の長さを調べたり、一部を取り出したり、置き換えたりすることです。
Rubyの文字列(String)にはたくさんのメソッドが用意されていますが、実際によく使うのは十数個ほどです。この記事では、初心者がまず覚えておきたいものを厳選して紹介します。シングルクォート・ダブルクォートの違いや #{} での式展開は、データ型の記事で紹介済みです。
👉 Rubyのデータ型(文字列・数値・型変換)についての記事はこちら
2. 長さ・大文字小文字
puts "Hello".length # 5
puts "こんにちは".length # 5
puts "hello".upcase # HELLO
puts "WORLD".downcase # world
puts "hello world".capitalize # Hello world(先頭だけ大文字)💡 Rubyの length(size でも可)は、日本語でもそのまま「文字数」を返します。PHPの strlen/mb_strlen のような使い分けは不要です。バイト数(データとしての大きさ)を知りたいときだけ、"こんにちは".bytesize(15)のように別のメソッドを使います。
3. 空白の除去・文字の置き換え
puts " hello ".strip # "hello"(前後の空白を除去)
puts "犬と犬が鳴く".gsub("犬", "猫") # "猫と猫が鳴く"(すべて置き換え)
puts "犬と犬が鳴く".sub("犬", "猫") # "猫と犬が鳴く"(最初の1つだけ)strip:前後の空白・改行を除去(lstripは左だけ、rstripは右だけ)gsub(検索, 置換):一致する部分をすべて置き換えるsub(検索, 置換):最初に一致した部分だけ置き換える
👉 gsub・sub はどちらも「元の文字列は変えず、置き換えた結果を新しい文字列として返す」点に注意してください。末尾に ! を付けた gsub!・sub! は元の文字列自体を書き換える破壊的メソッドです。
4. 一部を取り出す・含まれるか調べる
s = "abcdef"
puts s[1, 3] # "bcd"(1番目から3文字)
puts s[1..3] # "bcd"(1〜3番目の範囲)
puts s[-1] # "f"(うしろから1番目)
puts "user@example.com".include?("@") # true
puts "photo.png".start_with?("photo") # true
puts "photo.png".end_with?(".png") # true👉 文字列も配列と同じ [] や範囲(..)、マイナスのインデックスで一部を取り出せます。配列の操作を先に読んでいれば、同じ感覚でそのまま使えます。「含まれるか」は include?、「先頭/末尾が一致するか」は start_with?・end_with? で調べます。
5. 分割(split)・連結(join)
# 文字列 → 配列
parts = "りんご,みかん,ぶどう".split(",")
p parts # ["りんご", "みかん", "ぶどう"]
# 配列 → 文字列
csv = parts.join(" / ")
puts csv # りんご / みかん / ぶどう👉 split(区切り文字) で配列に分割、配列.join(つなぎ文字) で文字列に連結します。CSVのような区切りデータを扱うときの基本です。split の引数を省略すると、空白区切りで分割されます。
👉 配列の便利メソッド(map・selectなど)についての記事はこちら
6. 数値の書式指定
puts format("在庫%03d個", 7) # 在庫007個(0埋め3桁)
puts "在庫%03d個" % 7 # 同じ結果を % 演算子でも書ける
puts format("%.2f円", 1234.5) # 1234.50円(小数点2桁)👉 format(sprintf でも同じ)は、桁数や小数点をそろえた文字列を作るときに使います。"書式" % 値 という % 演算子を使った書き方もよく見かけます。3桁区切りのカンマを入れたい場合は、標準ライブラリの ActiveSupport(Rails)や自作の変換処理が必要になります。
7. そのほか覚えておきたいメソッド
puts "hello".reverse # olleh(逆順)
puts "ab" * 3 # ababab(繰り返し)
puts "hello".empty? # false
puts "".empty? # true
"abc".each_char { |c| print c, "-" } # a-b-c-👉 empty? は文字列が空("")かどうかを調べます。nil かどうかを調べる nil? とは別物なので、フォームの未入力チェックなどでは両方を意識する必要があります(nil に .empty? を呼ぶとエラーになります)。
8. 文字列メソッド 早見表
| メソッド | できること |
|---|---|
length(size) | 文字数を数える(日本語も文字数どおり) |
bytesize | バイト数を数える |
upcase / downcase / capitalize | 大文字・小文字変換 |
strip | 前後の空白・改行を除去する |
gsub / sub | すべて / 最初の1つを置き換える |
[](範囲・マイナス番号) | 一部を取り出す |
include? / start_with? / end_with? | 含まれるか・先頭/末尾が一致するか |
split / join | 分割 / 連結 |
format(% 演算子) | 桁数・小数点をそろえた文字列を作る |
empty? | 空文字かどうか |
9. まとめ
- 文字数は
lengthで十分(PHPのようなmb_系の使い分けは不要) - 置き換えは
gsub(すべて)・sub(最初の1つ)、末尾!は破壊的メソッド - 一部の取り出しは配列と同じ
[]、含まれるかはinclude? - 分割・連結は
split/join、桁をそろえるならformat - 空文字チェックは
empty?、nilチェックのnil?とは別物
👉 メソッド名を全部覚える必要はありません。「やりたいこと(数える・取り出す・置き換える)」から早見表で引けるようにしておき、細かい使い方は公式リファレンスで確認する、という進め方で十分です。