초성검색 기능이 급 필요해져서 급하게 여기 저기 정보를 보며 붙이다보니 엄청난 개판 소스가 등장 -_-;

그나마 조금 정리해서 올려봤다

주석으로 된걸 지우면 그나마 조금더 자세하게 살펴볼수 있다.

유니코드는 아래 주소와 표에있는 파일을 확인하면 더 자세히 살펴볼수있다

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넘버 이다)


 

블로그 이미지

hanpsy

카테고리

분류 전체보기 (2)
음악 (1)
안드로이드 (0)
Java (1)
기타 (0)