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

Javaで文字列内の重複文字を検索するプログラムの作成方法


この記事では、Javaを使って文字列内の重複文字を検索する方法を解説します。なお、文字列(String)とは、1つ以上の文字で構成され、ダブルクォート(" ")で囲まれたデータ型のことを指します。

まずは、今回実装するプログラムの具体的な動作イメージを確認しておきましょう。

入力値

入力文字列: Java Programming

期待される出力

文字列内の重複文字: a a r g m

アルゴリズム

重複文字の検索は、以下の手順で行います。

ステップ1 - 処理を開始する
ステップ2 - 文字列「input_string」とchar型配列「character_array」を宣言する
ステップ3 - 値を設定する
ステップ4 - 文字列をchar型配列に変換する
ステップ5 - 変数「i」と「j」を使ってcharacter_arrayを二重ループで走査し、if文でi番目の要素とj番目の要素が一致しているかどうかを判定する。一致していればそれは重複文字なので、その値を記録する
ステップ6 - 結果を表示する
ステップ7 - 処理を終了する

例1:すべての処理をmainメソッドに記述する場合

最初の例では、文字列の定義から重複文字の検索・表示まで、すべての処理をmainメソッド内にまとめて記述します。

public class Demo {
    public static void main(String argu[]) {
        String input_string = "Java Programming";
        System.out.println("文字列は次のように定義されています: " + input_string);
        char[] character_array = input_string.toCharArray();
        System.out.print("\n文字列内の重複文字は次のとおりです: ");
        for (int i = 0; i < input_string.length(); i++) {
            for (int j = i + 1; j < input_string.length(); j++) {
                if (character_array[i] == character_array[j]) {
                    System.out.print(character_array[j] + " ");
                    break;
                }
            }
        }
    }
}

出力結果

文字列は次のように定義されています: Java Programming

文字列内の重複文字は次のとおりです: a a r g m

例2:処理をメソッドとして分離する場合

次の例では、重複文字の検索処理を独立したstaticメソッドとして切り出し、オブジェクト指向プログラミングの考え方に沿って実装します。処理を部品化することで、コードの再利用性と可読性が向上します。

public class Demo {
    static void duplicate_characters(String input_string){
        char[] character_array = input_string.toCharArray();
        System.out.print("\n文字列内の重複文字は次のとおりです: ");
        for (int i = 0; i < input_string.length(); i++) {
            for (int j = i + 1; j < input_string.length(); j++) {
                if (character_array[i] == character_array[j]) {
                    System.out.print(character_array[j] + " ");
                    break;
                }
            }
        }
    }
    public static void main(String argu[]) {
        String input_string = "Java Programming";
        System.out.println("文字列は次のように定義されています: " + input_string);
        duplicate_characters(input_string);
    }
}

出力結果

文字列は次のように定義されています: Java Programming

文字列内の重複文字は次のとおりです: a a r g m

補足:計算量とより効率的な手法

本記事で紹介した実装は二重ループを使用しているため、時間計算量はO(n²)となります。文字列が長くなるほど処理時間が増大する点には注意が必要です。

文字の種類が限定されている場合(ASCII文字のみなど)や、各文字の出現回数を集計したい場合は、HashMapHashSetを活用することで、時間計算量O(n)での検索が可能になります。文字列の長さや目的に応じて、適切な手法を選択しましょう。


  1. Javaで台形の面積を求めるプログラムの作成方法を解説

    この記事では、Javaを使って台形(トラペジウム)の面積を求める方法について詳しく解説します。台形とは、少なくとも1組の対辺が互いに平行になっている四角形のことです。平行な2つの辺は「底辺」と呼ばれ、平行でない残りの2つの辺は「脚」と呼ばれます。英語圏では trapezoid(トラペゾイド)と呼ばれることもあります。 台形の面積は、次の公式を使って計算できます。 面積 = (高さ ÷ 2) × (上底 + 下底) すなわち、 面積 = ½ × (平行な2辺の長さの合計) × (平行な2辺間の垂直距離) 以下に具体的なイメージを示します。平行な2辺の長さを a、b、台形の高さを h としたとき

  2. 【Java入門】長方形の周囲(外周)を求めるプログラムの作り方

    長方形の周囲とは? この記事では、Javaを使って長方形の周囲(外周)を求める方法を解説します。長方形の周囲とは、長方形の4つの辺すべての長さを足し合わせた合計のことで、次の図のように「縦の辺2本」と「横の辺2本」の長さを合計したものに相当します。 長方形は向かい合う辺の長さが等しいという性質を持つため、周囲は次の式で計算できます。 周囲 = 2 ×(縦の長さ + 横の長さ) 入力と出力の例 たとえば、入力が次の値であるとします。 長方形の各辺の長さ:5, 8, 5, 8 このとき、期待される出力は次のとおりです。 Perimeter : 26 アルゴリズム 処理の流れは以下のようになりま