【Java】HashMapを使って文字列内の各文字の出現回数をカウントする方法
JavaではHashMapを利用することで、文字列内に含まれる各文字の出現回数を効率よくカウントできます。キーに文字(Character)、値に出現回数(Integer)を格納する仕組みにより、シンプルかつ高速な文字数集計が可能です。
サンプルコード
import java.io.*;
import java.util.*;
public class Demo{
static void count_characters(String input_str){
HashMap<Character, Integer> my_map = new HashMap<Character, Integer>();
char[] str_array = input_str.toCharArray();
for (char c : str_array){
if (my_map.containsKey(c)){
my_map.put(c, my_map.get(c) + 1);
}else{
my_map.put(c, 1);
}
}
for (Map.Entry entry : my_map.entrySet()){
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
public static void main(String[] args){
String my_str = "Joe Erien ";
System.out.println("文字列内の各文字の出現回数は次のとおりです");
count_characters(my_str);
}
}
実行結果
文字列内の各文字の出現回数は次のとおりです (空白) 2 r 1 e 2 E 1 i 1 J 1 n 1 o 1
プログラムの解説
Demoという名前のクラスの中に、count_charactersというメソッドが定義されています。このメソッド内部では、文字とその出現回数を対応付けて保存するためのHashMapが生成されます。
処理の流れは以下のとおりです。
toCharArray()メソッドで、入力文字列をchar型の配列に変換します。- 拡張forループで、配列内の各文字を1つずつ取り出します。
containsKey()メソッドで、その文字がすでにマップに登録されているかどうかを判定します。- 登録済みの場合は現在のカウントに1を加えて更新し、未登録の場合は1を初期値として新規登録します。
- 最後に
entrySet()でマップ全体を走査し、各文字とその出現回数をコンソールに出力します。
mainメソッドでは、対象となる文字列「Joe Erien 」(末尾に半角スペースを含む)が定義され、count_charactersメソッドが呼び出されます。実行結果から、スペースが2回、eが2回出現していることが確認できます。
なお、HashMapは要素の順序を保証しないため、出力される文字の並び順は実行環境によって異なる場合があります。
補足:getOrDefault()でさらに簡潔に書く方法
Java 8以降では、getOrDefault()メソッドを使うことで、if文による分岐を省略し、1行で同じ処理を記述できます。
my_map.put(c, my_map.getOrDefault(c, 0) + 1);
このコードは「キーが存在しない場合はデフォルト値0を取得し、存在する場合は現在の値を取得して1を加える」という動作をまとめたもので、先ほどのif-else文とまったく同じ結果になります。可読性が向上するため、実務でも広く使われている書き方です。
-
【Java入門】文字列から各単語の最初の文字だけを抽出して出力する方法
JavaにおけるStringクラスは、文字列を表すために使用されるクラスです。Javaプログラム内に記述されたすべての文字列リテラルは、Stringクラスのインスタンスとして扱われます。また、Stringオブジェクトは定数であり、一度生成するとその値を後から変更することができません。この性質は「不変(イミュータブル)」と呼ばれます。 文字列の中から各単語の最初の文字だけを取り出して出力したい場合は、以下のようなプログラムで実現できます。 サンプルコード public class FirstCharacterPrintTest { public static void main(Stri
-
Pythonで文字列内の各文字の出現回数を調べる方法【3つのアプローチ解説】
この記事では、指定された文字列の中に、それぞれの文字が何回出現するかを求める方法について解説します。 問題設定: 1つの文字列が与えられたとき、その文字列に含まれる各文字の出現回数を求める必要があります。 ここでは、以下の3つのアプローチを順番に見ていきましょう。 アプローチ1:素朴な全走査(ブルートフォース) 最も基本的な方法は、文字列を1文字ずつループで走査し、辞書を使って出現回数を記録していくやり方です。すでに辞書に存在する文字であればカウントを1増やし、初めて登場した文字であれば新しくキーとして追加します。 コード例 test_str = Tutorialspoint # カウント用の