Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java】指定された文字列がパングラムかどうかを判定するプログラムの書き方


この記事では、指定された文字列がパングラム(pangram)であるかどうかを判定する方法を解説します。パングラムとは、大文字・小文字を区別せず、アルファベット26文字(a〜z)をすべて含む文字列のことです。「The quick brown fox jumps over the lazy dog」などが有名な例として挙げられます。

以下に入力と出力の例を示します。

入力例:

入力文字列:Abcdefghijklmnopqrstuvwxyz

期待される出力:

はい、この文字列はパングラムです

アルゴリズム

ステップ1 - 処理を開始する
ステップ2 - 文字列型変数 input_string を宣言する
ステップ3 - 変数に値を設定する
ステップ4 - 入力文字列を文字単位で走査できるように準備する
ステップ5 - 各文字に対して「charAt(i) - 'a'」を使い、対応するインデックスのフラグを立てる。すべてのアルファベットのフラグが立っていればパングラムである
ステップ6 - 判定結果を表示する
ステップ7 - 処理を終了する

例1:mainメソッド内ですべての処理を行う場合

ここでは、すべての処理をmainメソッドの中にまとめて記述します。

public class Pangram {
   static int size = 26;
   static boolean isLetter(char ch) {
      if (!Character.isLetter(ch))
         return false;
      return true;
   }
   public static void main(String args[]) {
      String input_string = "Abcdefghijklmnopqrstuvwxyz";
      System.out.println("定義された文字列:" + input_string);
      int string_length = input_string.length();
      input_string = input_string.toLowerCase();
      boolean[] is_true = new boolean[size];
      for (int i = 0; i < string_length; i++) {
         if (isLetter(input_string.charAt(i))) {
            int letter = input_string.charAt(i) - 'a';
            is_true[letter] = true;
         }
      }
      boolean result = true;
      for (int i = 0; i < size; i++) {
         if (!is_true[i]) {
            result = false;
            break;
         }
      }
      if (result)
         System.out.println("\nはい、この文字列はパングラムです");
      else
         System.out.println("\nいいえ、この文字列はパングラムではありません");
   }
}

出力

定義された文字列:Abcdefghijklmnopqrstuvwxyz

はい、この文字列はパングラムです

例2:オブジェクト指向スタイルで関数に分割する場合

ここでは、判定処理を独立したメソッドとして切り出し、オブジェクト指向プログラミングの形式で実装します。

public class Pangram {
   static int size = 26;
   static boolean isLetter(char ch) {
      if (!Character.isLetter(ch))
         return false;
      return true;
   }
   static boolean check_alphabets(String input_string, int string_length) {
      input_string = input_string.toLowerCase();
      boolean[] is_true = new boolean[size];
      for (int i = 0; i < string_length; i++) {
         if (isLetter(input_string.charAt(i))) {
            int letter = input_string.charAt(i) - 'a';
            is_true[letter] = true;
         }
      }
      for (int i = 0; i < size; i++) {
         if (!is_true[i])
            return false;
      }
      return true;
   }
   public static void main(String args[]) {
      String input_string = "Abcdefghijklmnopqrstuvwxyz";
      System.out.println("定義された文字列:" + input_string);
      int string_length = input_string.length();
      if (check_alphabets(input_string, string_length))
         System.out.println("\nはい、この文字列はパングラムです");
      else
         System.out.println("\nいいえ、この文字列はパングラムではありません");
   }
}

出力

定義された文字列:Abcdefghijklmnopqrstuvwxyz

はい、この文字列はパングラムです

コードのポイント

このプログラムの動作を理解するうえで重要なポイントは以下のとおりです。

  • 小文字への統一: toLowerCase() で文字列をすべて小文字に変換することで、大文字・小文字の違いを意識せずに判定できます。
  • 出現フラグの管理: サイズ26のboolean配列を用意し、「charAt(i) - 'a'」で求めたインデックス(a=0、b=1、…、z=25)に対応する要素をtrueにします。
  • 英字以外の除外: Character.isLetter() で英字かどうかを確認し、数字や記号などは判定対象から除外します。
  • 最終判定: boolean配列にfalseが1つでも残っていればパングラムではありません。すべてtrueであればパングラムと判定できます。
  1. 指定された文字列が母音回文であるかどうかを確認するPythonプログラム

    はじめに この記事では、「与えられた文字列から子音をすべて取り除いたとき、残った母音だけの文字列が回文になっているかどうかを判定する」という問題を、Pythonプログラムで解く方法を解説します。 問題の概要 問題文:母音と子音の両方を含む文字列が与えられます。まず文字列からすべての子音を取り除き、その結果得られた文字列が回文(前から読んでも後ろから読んでも同じ並びになる文字列)であるかどうかを確認してください。 解決のアプローチ この問題は、以下の手順で解くことができます。 元の文字列を先頭から順に走査し、母音(a・e・i・o・u)だけを取り出して新しい文字列を作成します。 母音が1つも

  2. Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法

    本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列