@Shota_U
編集履歴
この質問を報告
質問を購読する
Q&A

[Ruby]変数の一文字目がA〜Z大文字であるか判定する方法を教えてください

この問題、Rubyを使った場合どういう書き方になりますか?
調べて何度かトライしてみたもののなかなかうまいこといきません。

もしわかる方がいれば、回答してくださると幸いです
C414B42E-D844-4C12-90CE-8495F3F5A102_1_201_a.jpeg

0
3
件の回答

正規表現を使います。

def initialLetterIsUppercaseOfAlphabet?(s)
  s.match?(/\A[A-Z]/)
end

p initialLetterIsUppercaseOfAlphabet?("ABCDEFG") # true
p initialLetterIsUppercaseOfAlphabet?("こんにちは") # false

match?メソッド

文字列 String オブジェクトは正規表現を使ってその文字列が「〜な文字列かどうか」をチェックする match? メソッドを持っています。

正規表現

その「〜かどうか」を指定しているのが /\A[A-Z]/ の部分です。

  • 頭とお尻にある / は正規表現であることを示すマークです。/ に囲まれた中にどのような文字列か調べたい内容を記述します
  • \A は「文字列の先頭」を意味します
  • [A-Z] はアルファベットの A 〜 Z いずれかという意味です

つまり、/\A[A-Z]/ で「文字列の先頭がアルファベットの A 〜 Z のいずれかか?」を調べてくださいという処理になります。

参考資料

Ruby で使用できる正規表現についてはこちらを確認してください。

1
@ycv57u6yさま ご回答ありがとうございます

なるほどですね!
matchメソッドと正規表現を使うと、勉強になりました。
ありがとうございました
残り1件のコメントを表示

効率が悪いが、もう少し仕組みのわかりやすい方法も紹介しておきます。

Ruby では範囲 Range というクラスを使用して文字の AZ までの集合のようなものを表現するオブジェクトを生成できます。

範囲オブジェクトの 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
1
hoge.start_with?(*'A'..'Z')
1
あなたも回答してみませんか :)
ユーザ登録
すでにアカウントを持っている方はログイン
ユーザーは見つかりませんでした