[java] 유니코드 자음 모음으로 분리 했다 다시 붙이기
Java |
2010. 9. 1. 17:08
초성검색 기능이 급 필요해져서 급하게 여기 저기 정보를 보며 붙이다보니 엄청난 개판 소스가 등장 -_-;
그나마 조금 정리해서 올려봤다
주석으로 된걸 지우면 그나마 조금더 자세하게 살펴볼수 있다.
유니코드는 아래 주소와 표에있는 파일을 확인하면 더 자세히 살펴볼수있다
http://www.unicode.org/
Hangul Jamo | 한글 자모 영역 |
0x1100-0x11F9 | U1100.pdf |
Hangul Compatibility Jamo | 한글 호환 자모 영역 |
0x3130-0x318E | U3130.pdf |
Hangul Syllables | 한글 영역 |
0xAC00-0xD7A3 | UAC00.pdf |
Halfwidth Jamo | 반각 자모 |
0xFF00-0xFFEF | UAC00.pdf |
중요한건 이 표인데
호환되지 않는 한글 자모영역을 기준으로 나열한다면
ㄱ = 0x1100
ㄲ = 0x1101
ㄴ = 0x1102
.......
ㅎ = 0x1112 이런순으로 간다 (18이 아니라 12인 이유는 16진수를 사용하기때문이다)
이런식으로 초성 18개 중성 20개 종성 27개로 나누어져있다
자음과 모음이 다 모여서 완전한 한개의 글씨의 시작위치는 0xAC00부터 시작되며 그 끝은 0xD79F이다
조금더 나아가 이해하면 저 코드로 모든 글자를 표현할수있다.
아래 코드는 완성형 한글을 초,중,종성으로 나누었다가 다시 완성형한글로 붙여본 코드이다
하도 급하게 짜다보니 주석 설명도 못붙인채 올렸다 [......]
간단한 구조를 적자면
메소드 구조로 되어있지않고 따로 입력받는 부분조차 없어서 직접 분해했다가 붙일 글자를 입력해야한다
그러면 길이만큼
초성 = (((글자 - 0xAC00) - (글자 - 0xAC00) % 28 ) ) / 28 ) / 21
중성 = (((글자 - 0xAC00) - (글자 - 0xAC00) % 28 ) ) / 28 ) % 21
종성 = (글자 - 0xAC00) % 28
의 식을 거치면 초성 중성 종성을 파악할수있다
다시 그 후 붙여주면 끝
붙일때는 0xAC00 + 28 * 21 * (초성의 index) + 28 * (중성 index) + (종성 index)
의 공식으로 하면된다.
! 인덱스값을 넣을때 16진수로 넣지 않게 주의하자
결과 화면 (완성형글자의 우측에는 유니코드 자모음 글자의 우측은 초중종성의 index넘버 이다)