正規表現を使います。
def initialLetterIsUppercaseOfAlphabet?(s)
s.match?(/\A[A-Z]/)
end
p initialLetterIsUppercaseOfAlphabet?("ABCDEFG") # true
p initialLetterIsUppercaseOfAlphabet?("こんにちは") # false
文字列 String
オブジェクトは正規表現を使ってその文字列が「〜な文字列かどうか」をチェックする match?
メソッドを持っています。
その「〜かどうか」を指定しているのが /\A[A-Z]/
の部分です。
/
は正規表現であることを示すマークです。/
に囲まれた中にどのような文字列か調べたい内容を記述します\A
は「文字列の先頭」を意味します[A-Z]
はアルファベットの A 〜 Z いずれかという意味ですつまり、/\A[A-Z]/
で「文字列の先頭がアルファベットの A 〜 Z のいずれかか?」を調べてくださいという処理になります。
Ruby で使用できる正規表現についてはこちらを確認してください。
効率が悪いが、もう少し仕組みのわかりやすい方法も紹介しておきます。
Ruby では範囲 Range
というクラスを使用して文字の A
〜 Z
までの集合のようなものを表現するオブジェクトを生成できます。
範囲オブジェクトの cover?
メソッドを使用して、先頭の文字がこの範囲に含まれるかを調べることもできます。
このとき、Ruby で文字列の先頭の文字だけを取得するには添字アクセス [n]
を使用します。このようなアクセスでは番号がゼロで始まるので、[0]
を指定すると 1 文字目という意味になります。
def initialLetterIsUppercaseOfAlphabet?(s)
alphabets = ("A".."Z") # 大文字のアルファベットの範囲を作る
initial_letter = s[0] # 文字列の先頭を取得
alphabets.cover?(initial_letter) # 先頭の文字が大文字のアルファベット群に含まれるかチェック
end
p initialLetterIsUppercaseOfAlphabet?("ABCDEFG") # true
p initialLetterIsUppercaseOfAlphabet?("こんにちは") # false