[Java] 자바 한글 초성 추출하는 방법

2023-01-08


Photo by Allec Gomes on Unsplash


1. 방법

 

방법은 전달받은 문자열 객체의 길이에 따라 루프를 돌면서 한글일 경우 한글 음절의 시작위치인 0xAC00 차감한 후 아래의 공식을 적용하여 구할 수 있다.

 

(unicode % 28) -> 종성 구하기

(unicode - (unicode % 28))/28)  -> 중성 구하기

((unicode - (unicode % 28))/28)/21 -> 초성 구하기

 

이후 한글 초성에 대한 인덱스가 리턴이 되는데, 해당 인덱스는 static 배열에 순서대로 자음을 적어두었다.

한글 초성은 순서대로 ㄱ-ㅎ(0 ~ 18) 의 순서를 가진다.


import java.util.Optional;

static String [] INITIAL_STRING = {
        "ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", 
        "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", 
        "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", 
        "ㅋ", "ㅌ", "ㅍ", "ㅎ" };
	
    
public void getInitialString(String stringContent) {
    String initialString = "";
    Optional<String> stringContentOp = Optional.ofNullable(stringContent);
    if(stringContentOp.isPresent()) {//전달 문자열 존재
        for(int i = 0; i < stringContentOp.get().length(); i++) {
            String stringLocationInfo = String.valueOf(stringContentOp.get().charAt(i)); //현재 위치의 한글자 추출
            if(stringLocationInfo.matches(".*[가-힣]+.*")) {// 한글일 경우
                if(stringLocationInfo.charAt(0) >= 0xAC00) // 음절 시작코드(10진값, 문자) : 0xAC00 (44032 ,'가' )
                {
                    int unicode = stringLocationInfo.charAt(0) - 0xAC00;
                    int index = ((unicode - (unicode % 28))/28)/21;
                    initialString += INITIAL_STRING[index]; 
                }

            } else {//한글이 아닐경우
                initialString += stringLocationInfo;//변환없이 그대로 저장
            }
        	System.out.println(initialString);
        }
    }
}

메인 이미지 출처 : Photo by Allec Gomes on Unsplash