Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

String#end_with?とString#start_with?が地味に便利

Stringクラスには、文字列を含むか否かを判定するinclude?メソッドがあります。

"hoge.html".include?('.html')
#=> true

正規表現を渡すことができないので、先頭や末尾一致には使えないなーなどと思っていたのですが…
ありました。String#end_with?とString#start_with?が。

"hoge.html".start_with?('hoge')
#=> true

"hoge.html".end_with?('.html')
#=> true

正規表現でやるのも手ですが、必ずしも全員が習熟しているわけじゃありませんしね。
Runiusの実装を見ても、内部的に正規表現を使っているわけではないみたいです。

  def start_with?(*prefixes)
    prefixes.each do |prefix|
      prefix = Rubinius::Type.check_convert_type prefix, String, :to_str
      next unless prefix
      return true if self[0, prefix.length] == prefix
    end
    false
  end

rubinius/string.rb at master · rubinius/rubinius · GitHub

要所要所で使い分けるのが良さげです。