文字列を検索しよう
文字列の中に特定の文字や文字列が含まれているかを調べたり、どこにあるかを検索したりする方法を学びます。
.include? で存在を確認する
文字列の中に特定の部分文字列が含まれているかを確認するには、.include? メソッドを使います。
text = "Hello, Ruby!" puts text.include?("Ruby") # => true puts text.include?("Java") # => false
.include? メソッドは、部分文字列が見つかれば true、見つからなければ false を返します。
.index で位置を検索する
部分文字列がどこにあるかを知りたい場合は、.index メソッドを使います。
text = "Hello, Ruby!" puts text.index("Ruby") # => 7 puts text.index("o") # => 4
.index メソッドは、部分文字列が最初に見つかった位置(インデックス)を返します。見つからない場合は nil を返します。
text = "Hello, Ruby!" p text.index("Java") # => nil
puts で nil を出力すると何も表示されないため、nil を確認したいときは p メソッドを使います。
検索開始位置を指定する
.index メソッドの第2引数で、検索を開始する位置を指定できます。
text = "banana" # 012345 puts text.index("a") # => 1(最初の "a" の位置) puts text.index("a", 2) # => 3(インデックス 2 以降で検索) puts text.index("a", 4) # => 5(インデックス 4 以降で検索)
.start_with? で先頭を判定する
文字列が特定の文字列で始まるかを判定するには、.start_with? メソッドを使います。
text = "Hello" puts text.start_with?("He") # => true puts text.start_with?("lo") # => false
複数の候補を指定することもできます。いずれかに一致すれば true を返します。
filename = "report.pdf" puts filename.start_with?("doc", "report") # => true
.end_with? で末尾を判定する
文字列が特定の文字列で終わるかを判定するには、.end_with? メソッドを使います。
text = "Hello" puts text.end_with?("lo") # => true puts text.end_with?("He") # => false
.start_with? と同様に、複数の候補を指定できます。
filename = "image.png" puts filename.end_with?(".jpg", ".png") # => true
.count で文字の出現回数を数える
指定した文字が何回出現するかを数えるには、.count メソッドを使います。
text = "banana" puts text.count("a") # => 3 puts text.count("n") # => 2
複数の文字を指定すると、それらの文字の合計出現回数を返します。
text = "hello" puts text.count("lo") # => 3("l" が 2 回、"o" が 1 回)
Ruby の .count メソッドは個々の文字をカウントします。部分文字列 "lo" が何回出現するかではなく、"l" と "o" という文字がそれぞれ何回出現するかの合計を返します。
まとめ
.include?メソッドで部分文字列の存在を確認できる.indexメソッドは部分文字列の位置を返し、見つからなければnilを返す.start_with?と.end_with?で先頭・末尾の判定ができる.countメソッドで指定した文字の出現回数を数えられる
演習に挑戦