Java에서 HashMap을 사용하면 문자열에 포함된 각 문자가 몇 번 등장하는지 손쉽게 계산할 수 있습니다. 아래 예제 코드를 통해 구현 방법을 자세히 살펴보겠습니다.
예제 코드
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("The occurence of every character in the string is ");
count_characters(my_str);
}
}
출력 결과
The occurence of every character in the string is 2 r 1 e 2 E 1 i 1 J 1 n 1 o 1
코드 동작 원리
Demo 클래스 안에는 count_characters라는 정적 메서드가 정의되어 있습니다. 이 메서드는 문자(Character)를 키로, 등장 횟수(Integer)를 값으로 저장하는 HashMap을 생성합니다.
전체적인 동작 과정은 다음과 같습니다.
toCharArray()메서드를 사용해 입력 문자열을 문자 배열로 변환합니다.- 배열의 각 문자를 순회하면서
containsKey()로 해당 문자가 이미 맵에 존재하는지 확인합니다. - 이미 존재하는 문자라면 기존 값에 1을 더해 다시 저장하고, 처음 등장한 문자라면 값 1로 새로 등록합니다.
- 마지막으로
entrySet()을 순회하며 각 문자와 그 개수를 콘솔에 출력합니다.
main 메서드에서는 분석 대상 문자열인 "Joe Erien "을 정의한 뒤 count_characters 메서드를 호출하고, 결과 앞에 안내 메시지를 함께 출력합니다.
참고 사항
출력 결과 첫 줄의 2는 공백 문자(스페이스)가 두 번 등장했음을 의미합니다. 공백 역시 하나의 문자로 집계되기 때문에 키가 눈에 보이지 않고 개수만 표시됩니다. 또한 대소문자는 서로 다른 문자로 구분되므로 e와 E는 각각 별도로 계산됩니다. 만약 대소문자를 구분하지 않고 집계하고 싶다면, 처리 전에 input_str.toLowerCase()로 문자열을 변환하면 됩니다.