2023-01-08
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