반응형
단어가 입력된 시점에서 초성을 추출하여 별도 컬럼에 저장하였다가 함께 조회하기 위해 초성 추출 코드 작성
`한`이라는 글자를 표현하기 위해서는 글자마다의 Index 판단
초성 `ㅎ` 의 경우 18번째
중성 `ㅏ` 의 경우 0번째
종성 `ㄴ` 의 경우 4번째
값을 더하여 ((18*588) + (0 * 28) + 4) + 44032 = 54620 값 생성
`한` 이라는 글자는 54620으로 `한`으로 표현
- 588: 중성 21자 * 종성 28자 = 588
- 44032 = 한글 시작 값
@Test
public void getKeyword(){
String keyword = "무궁화 꽃이 피었습니다.1234567890!@#$%^&*(){}|:<>?걔걕걖걗걘걙걚걛걜걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯";
for(int i=0; i < keyword.length();i++) {
String k = keyword.substring(i, i+1);
System.out.println(k + "//=" + getInitialSound(k));
}
}
/**
* 초성 추출, 중성, 종성 구하는 방법 추가
* @param text
* @return
*/
public String getInitialSound(String text) {
// 초성 19자
final String[] initialChs = {
"ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ",
"ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ",
"ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ",
"ㅋ", "ㅌ", "ㅍ", "ㅎ"
};
// 중성 21자
final String[] medialChs = {
"ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ",
"ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ",
"ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ",
"ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ",
"ㅣ"
};
// 종성 없는 경우 포함하여 28자
final String[] finalChs = {
" ", "ㄱ", "ㄲ", "ㄳ", "ㄴ",
"ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ",
"ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ",
"ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ",
"ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ",
"ㅌ", "ㅍ", "ㅎ"
};
// 19: 초성
// 21: 중성
// 28: 종성
if(text.length() > 0) {
char chName = text.charAt(0);
if(chName >= 0xAC00 && chName <= 0xD7A3) { // 0xAC00(가) ~ 0xD7A3(힣)
int uniVal = chName - 0xAC00;
int initialCh = ((uniVal) / (21 * 28)); // 초성 index
System.out.println(initialChs[initialCh]);
// 중성
int medialCh = ((uniVal % (28 * 21)) / 28);
System.out.println(medialChs[medialCh]);
// 종성
int finalCh = ((uniVal % 28));
System.out.println(finalChs[finalCh]);
return initialChs[initialCh];
} else {
return ""+chName;
}
}
return "";
}
참고
반응형
'FullStack > 21. Java' 카테고리의 다른 글
[MAVEN] 로컬 jar 참조하기 (0) | 2021.02.09 |
---|---|
[Logback] 로그파일 경로 확인 방법 (0) | 2021.02.09 |
[Java] 프로세스 경과 시간 측정하기 (0) | 2021.01.14 |
[JAVA] HttpClient를 통한 JOSN 전송 및 JSP로 데이터 수신 (0) | 2020.12.17 |
[Java] Heap Size 설정 (0) | 2020.11.12 |