記事の内容
この記事では、文字列で使える様々なメソッドを紹介します。
文字列とは何か?
Rubyの文字列とは、「ダブルクォーテーション」もしくは「シングルコーテーション」で囲まれた値です。
また文字列のクラスは、Stringクラスです。
val_1 = 'name' | |
val_2 = "japan" | |
p val_1.class | |
# String | |
p val_2.class | |
# String |
文字列の連結
文字列を連結するには、「+」「<<」「concat」の三つを使ってやる方法があります。
「<<」を使った方が高速には動作しますが、通常の連結ならば、わかりやすい「+」でもいいと思います。
# 文字列の連結 | |
val_1 = 'Yamada' | |
val_2 = 'Tarou' | |
# 「+」を使って文字列を連結する | |
v = val_1 + val_2 | |
p v | |
# YamadaTarou | |
# 「<<」を使って文字列を連結する | |
v = val_1 << val_2 | |
p v | |
# YamadaTarou | |
# 「concat」を使って文字列を連結する | |
v = val_1.concat(val_2) | |
p v | |
# YamadaTarou |
文字列の置換
文字列を置換するためには、「sub」「sub!」「gsub」「gsub!」という4つのメソッドがあります。
まずは、マッチした1ヶ所だけを変更する「sub」メソッドです。
「sub!」メソッドを使うと、破壊的な変更を行うことができます。
# 文字列の置換 | |
country = "cebu cebu cebu" | |
# 一つのcebuをjapanに置き換えます。 | |
p country.sub(/cebu/, 'japan') | |
# "japan cebu cebu" | |
# country自体の値は変わっていません | |
p country | |
# "cebu cebu cebu" | |
# country自体の値を変更するには、破壊的なメソッドである「sub!」を使います | |
country.sub!(/cebu/, 'japan') | |
p country | |
# "japan cebu cebu" |
次に、マッチした箇所の全てを変更する「gsub」メソッドです。
「gsub!」メソッドを使うと、破壊的な変更を行うことができます。
# 文字列の置換 | |
country = "cebu cebu cebu" | |
# cebuをjapanに置き換えます。 | |
p country.gsub(/cebu/, 'japan') | |
# "japan japan japan" | |
# country自体の値は変わっていません | |
p country | |
# "cebu cebu cebu" | |
# country自体の値を変更するには、破壊的なメソッドである「gsub!」を使います | |
country.gsub!(/cebu/, 'japan') | |
p country | |
# "japan japan japan" |
文字列の削除と抽出
「delete」メソッドを使うと、任意の文字列を削除することができます。
「delete!」メソッドを使うと、破壊的な変更を行うことができます。
# 文字列の削除 | |
country = 'japan' | |
# jaの全てが消えます | |
country.delete('ja') | |
# "pn" | |
# country自体の値は変わっていません | |
p country | |
# 「delete!」を使うと値が変わります | |
country.delete!('ja') | |
p country | |
# "pn" |
「slice」メソッドを使うと、範囲で文字列を抽出して、該当文字列を削除することができます。
「slice!」メソッドを使うと、破壊的な変更を行うことができます。
country = 'japan' | |
# 0番目から3番目の値を取得します | |
p country.slice(0..2) | |
# jap | |
# country自体の値は変わっていません | |
p country | |
# "japan" | |
# 「slice!」メソッドを使って、破壊的な変更を加えます | |
p country.slice!(0..2) | |
p country | |
# "an" | |
country_2 = 'america' | |
# 2番目から最後までの値を取得します | |
p country_2.slice(2..-1) | |
# "erica" |
文字列を含む
文字列に対して、「include?」を使って、指定した文字列が存在するか確認します。
country = 'america' | |
p country.include?('america') | |
# true | |
p country.include?('ame') | |
# true | |
p country.include?('amef') | |
# false |
文字列に対して「start_with?」や「end_with?」を使って、指定した文字が最初や最後に存在することを確認します。
# 指定の文字列で始まっているかを確認します | |
country = 'america' | |
p country.start_with?('ame') | |
# true | |
p country.start_with?('Ame') | |
# false | |
p country.start_with?('me') | |
# 指定の文字列で終わっているかを確認します | |
country = 'america' | |
p country.end_with?('ca') | |
# true | |
p country.end_with?('CA') | |
# false | |
p country.end_with?('ri') | |
# false |
文字列の分割
文字列を分割するために、「split」「partition」「rpartition」という三つのメソッドを紹介します。
# 文字列の分割 | |
cities = "cebu, tokyo, osaka" | |
# カンマで分割 | |
p cities.split(",") | |
# 分割して、配列として取得 | |
# ["cebu", " tokyo", " osaka"] | |
# 指定した文字列で分割 | |
val = "americanamerican" | |
p val.partition('me') | |
# ["a", "me", "ricanamerican"] | |
# 末尾から指定した文字列で分割 | |
val = "americanamerican" | |
p val.rpartition('me') | |
# ["americana", "me", "rican"] |
文字列の比較
「==」「eql?」「equal?」のそれぞれの動作の違いを見ていきます。
# 文字列の比較です | |
v1 = 'america' | |
v2 = 'america' | |
# 先頭が大文字 | |
v3 = 'America' | |
# 「==」を使った比較 | |
p v1 == v2 | |
# true | |
p v1 == v3 | |
# false | |
# 「eql?」を使った比較 | |
# 文字列の値が同じなのでtrue | |
p v1.eql?(v2) | |
# true | |
p v1.eql?(v3) | |
# false | |
# 「equal?」を使った比較 | |
# 文字列の値が同じだけど、object_idの値が違うのでfalse | |
p v1.equal?(v2) | |
# false | |
# object_idを確認 | |
p v1.object_id | |
# 47178390570680 | |
p v2.object_id | |
# 47178389573320 | |
p v1.equal?(v3) | |
# false |
文字列の検索
文字列を検索するために、「empty?」「index」「rindex」というの三つのメソッドを紹介します。
# 空文字か調べる | |
val_1 = 'cebu' | |
p val_1.empty? | |
# false | |
val_2 = '' | |
p val_2.empty? | |
# true | |
# 文字列の位置を前から確かめる | |
country = 'americaamerica' | |
p country.index('a') | |
# 0 | |
p country.index('c') | |
# 5 | |
# 指定した場所から検索する | |
# 1番目から「a」を検索する | |
p country.index('a', 1) | |
# 6 | |
# 文字列の位置を後ろ確かめる | |
country = 'americaamerica' | |
p country.rindex('a') | |
# 13 | |
p country.rindex('c') | |
# 12 | |
# 指定した場所から検索する | |
# 第2引数に数字を指定すると、その位置から先頭に向かって検索します。 | |
# その数字は末尾からの位置ではなく先頭からの位置です | |
p country.rindex('a', 7) | |
# 6 | |
p country.rindex('i', 5) | |
# 4 |
まとめ
この記事では、文字列の操作に使える様々なメソッドを紹介しました。
Good luck with your engineer life!