【Ruby入門】文字列の基本と表示メソッドにて文字列の基本を説明しました。
引き続き、本記事では文字列の操作、具体的には文字列の編集や検索などを解説します。
プログラム中で適宜コメントを入れています。 「# ・・・」の箇所です。もちろん、動作をお試しになるときは書く必要はありません。
文字列の結合
+で文字列をつなげる
文字列をつなげるには、+を使います。
str1 = "abcde" str2 = "fghij" puts str1 + str2
[実行結果]
abcdefghij
+を使い、文字列の結合ができました。
concatや<<で文字列をつなげる
+とは別に、文字列をつなげる方法を解説します。concatと<<です。
str1 = "abcde" str2 = "fghij" puts str1.concat(str2)
[実行結果]
abcdefghij
concatを使い、文字列の結合ができました。次に、<<を試してみましょう。
str1 = "abcde" str2 = "fghij" puts str1 << str2
[実行結果]
abcdefghij
concatと<<の両方とも、同じように結合できました。
+とconcatや<<のちがい
+とconcatや<<とは動作が異なります。以下のプログラムを実行すれば一目瞭然です。結合後のstr1に注目してください。
まずは+からです。
str1 = "abcde" str2 = "fghij" puts str1 + str2 puts str1 # 結合後のstr1を確認 puts str2 # 結合後のstr2を確認
[実行結果]
abcdefghij abcde fghij
次に、<< です。concatでも動作は同じです。
str1 = "abcde" str2 = "fghij" puts str1 << str2 puts str1 # 結合後のstr1を確認 puts str2 # 結合後のstr2を確認
[実行結果]
abcdefghij abcdefghij fghij
お分かりでしょうか?str1の内容が変わっています。
+は文字を結合して新たに文字列を生成するので、結合前後で内容は変わりません。
concatや<<は、元の文字列に結合するので、結合後に内容が変わってしまいます。
用途に応じて使い分けてください。
文字列の比較
文字列の比較は、==や!=といった比較演算子で可能です。
puts "abc" == "abc" puts "abc" == "def" puts "abc" != "abc" puts "abc" != "def"
[実行結果]
true false false true
==または=!によって比較し、結果が論理値で表示されました。
文字列の検索
文字列中に対象とする文字列が含まれるどうかを調べる方法です。
単純に含まれるかどうかを知りたいときはinclude?を、左から何文字目かを知りたいときはindexを使います。
puts "abcdefg".include?("cde") puts "abcdefg".include?("xyz")
[実行結果]
true false
含まれていればtrue、含まれていなければfalseが表示されました。次はindexです。
puts "abcdefg".index("cde") puts "abcdefg".index("xyz")
[実行結果]
2 (空白)
indexは、対象とする文字列に検索する文字列が含まれていないときはnilを返します。(もちろん実行すれば(空白)とは表示されず、何も表示されません)。
特定の文字列を削除する
対象とする文字列から、特定の文字列を消したいときはdeleteを使います。
puts "abcdefg".delete("cde")
[実行結果]
abfg
指定した文字列が消えました。
末尾の改行コードを削除する
末尾の改行コードを削除したいときはchompを使います。
それが何に役立つのか?と思われるかもしれません。具体例をあげてみましょう。
文字を入力しEnterすると文字列の長さを返す、というプログラムを考えます。入力した値を得るのはgets、文字列長はlengthを使います。
str = gets puts str.length
実行すると入力待ち状態になるので、abcdeと入力してEnterします。
[実行結果]
6
・・・あれ?変ですね。5文字のはずが6と返ってきました。
実は、Enterしたときに文字列に改行コードが付加されて、「abcde + 改行コード」がstrに代入されるから6となります。
そこでchompを使います。
str = gets.chomp puts str.length
[実行結果]
5
今度は大丈夫です。5と返ってきました。
特定の位置から文字列を切り出す
先頭何文字目から何文字を切り出す、というのは開発現場ではよく出てきます。そんなときは、配列と同様にインデックスを指定します。
str = "AbCdEF" puts str[1] # 2文字目だけ切り出す puts str[1,3] # 2文字目から4文字切り出す
[実行結果]
b bCd
配列のインデックスと同じ考えなので、1を指定すると2文字目になりますので注意してください。
その他の文字列を操作するメソッド
文字列を操作するとても便利なメソッドを、順番に解説します。解説する3つのメソッドはすべて破壊的メソッドを持ちます。
破壊的メソッドとは、中身を書き換えてしまうメソッドです。詳しくは「最初はこれだけ!まずは手を動かしたい人のRuby入門」を確認してください。
逆順にするreverse
reverseは文字列の並びを逆順にします。
str = "abcdefg" puts str.reverse
[実行結果]
gfedcba
すべて大文字にするupcase
upcaseは、文字列をすべて大文字に変換します。
str = "AbCdEF" puts str.upcase
[実行結果]
ABCDEF
すべて小文字にするdowncase
downcaseは、文字列をすべて小文字に変換します。
str = “AbCdEF" puts str.downcase
[実行結果]
abcdef
小文字と大文字を逆転させるswapcase
もちろん、大文字と小文字を反転させるメソッドもあります。swapcaseです。
str = "AbCdEF" puts str.swapcase
[実行結果]
abcdef
まとめ
文字列の操作を解説しましたが、いかがでしたか?
他言語でできることは、Rubyでも一通りそろっていることがお分かりいただけたと思います。
ご自身でも何度も試して、ぜひ習得してくださいね!