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

Javaで文字列内の各文字の出現回数をカウントする方法(HashMap活用)

Javaで文字列に含まれる各文字が何回出現するかをカウントしたい場面は多くあります。例えば、テキスト解析やデータ処理の前処理などです。本記事では、HashMapを使って効率的に各文字の出現回数を数える方法を解説します。

対象となる文字列

今回は、次の文字列を例にして説明します。

String myStr = "thisisit";

この文字列「thisisit」には、t・h・i・s の4種類の文字が含まれており、それぞれの出現回数を求めるのがゴールです。

カウントの仕組み:HashMapを使ったアプローチ

文字ごとの出現回数を管理するために、キーに文字(Character)、値に出現回数(Integer)を持つHashMapを使用します。

処理の流れは以下のとおりです。

  • charAt()メソッドで文字列から1文字ずつ取り出す
  • containsKey()メソッドで、その文字がすでにHashMapに登録されているか確認する
  • 登録済みなら既存のカウントを+1して更新し、未登録なら1で新規登録する
HashMap <Character, Integer> hashMap = new HashMap<>();
for (int i = myStr.length() - 1; i >= 0; i--) {
    if (hashMap.containsKey(myStr.charAt(i))) {
        int count = hashMap.get(myStr.charAt(i));
        hashMap.put(myStr.charAt(i), ++count);
    } else {
        hashMap.put(myStr.charAt(i), 1);
    }
}

なお、このループは文字列の末尾から先頭に向かって処理していますが、出現回数のカウント結果は順序に依存しないため、先頭からループしても同じ結果になります。

完全なサンプルプログラム

以下は、上記のロジックを組み込んだ完全なプログラム例です。

import java.util.HashMap;

public class Demo {
    public static void main(String[] args) {
        String myStr = "thisisit";
        System.out.println("文字列 = " + myStr);

        HashMap <Character, Integer> hashMap = new HashMap<>();
        for (int i = myStr.length() - 1; i >= 0; i--) {
            if (hashMap.containsKey(myStr.charAt(i))) {
                int count = hashMap.get(myStr.charAt(i));
                hashMap.put(myStr.charAt(i), ++count);
            } else {
                hashMap.put(myStr.charAt(i), 1);
            }
        }
        System.out.println("各文字の出現回数 = " + hashMap);
    }
}

実行結果

このプログラムを実行すると、次のような出力が得られます。

文字列 = thisisit
各文字の出現回数 = {s=2, t=2, h=1, i=3}

結果から、「i」が3回、「s」と「t」がそれぞれ2回、「h」が1回出現していることがわかります。

使用した主なメソッドの解説

charAt(int index)

文字列内の指定したインデックス位置にある文字を返します。ループ内で1文字ずつ取り出す際に使用します。

containsKey(Object key)

指定したキーがマップに存在するかどうかを判定します。ここでは「その文字がすでにカウントされているか」のチェックに使います。

get(Object key) / put(K key, V value)

get()で現在のカウント値を取得し、put()で更新後のカウントを登録します。

まとめ

HashMapを利用すれば、文字列内の各文字の出現回数をシンプルかつ効率的にカウントできます。計算量は文字列の長さに比例するO(n)となり、実用的な性能が得られます。また、Java 8以降ではmerge()メソッドやStream APIを使えば、さらに簡潔に記述することも可能です。ぜひ自分のコードにも応用してみてください。

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

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

  2. Javaでカウンタープログラムを実装する方法をわかりやすく解説

    この記事では、JavaのSwingを使ってシンプルなカウンター(数を数える)アプリケーションを実装する方法を解説します。このプログラムでは、JLabelでカウント用のラベルを表示し、JTextFieldで現在のカウント値を保持し、JButtonで「追加(Add)」「削除(Remove)」「リセット(Reset)」の3つのボタンを作成します。 「Add」ボタンをクリックするとJTextField内のカウントが1ずつ増加し、「Remove」ボタンをクリックすると1ずつ減少します。さらに「Reset」ボタンをクリックすると、カウントは0にリセットされます。 実装例 import java.awt.*