正規表現を使います。
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
同じ問題で詰まった人が検索でたどり着けるように、画像ではなくテキストで提示しては如何でしょうか?
Google Driveの機能で文字起こししてみたので、お役立て下さい。
【問題】 ---
- hogeという変数に文字列が入ってい ます(日本語も記号も英字も入る可能 性がある)
- この変数の1文字目がA-Zの大文字か どうかを判定する関数を実装してくだ さい - 言語は何を使っても大丈夫です
- 例 - ABCDEFG → true
- こんにちわ → false
- こBにちわ → false
- a##&&& → false
- Bにちわ → true
- - - - - - - - - -