Thursday, July 02, 2009

초성,중성,종성 분리 함수

**
* @(#) HangulGati.java   2002/08/03
*
*  초성 19개:   ㄱ   ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
*  중성 21개:   ㅏ   ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
*  종성 28개:  Fill  ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ
*
*  유니코드 2.0 한글의 범위
*      AC00(가) ~ D7A3(힣)
*
* -------------
*  메소드 설명
* -------------
*   public static String toDaro(String s)
*       한글의 초성, 중성, 종성을 분리하기
*       변환 예:
*           대-한민국! 코리아팀 파이팅!  -->  ㄷㅐ-ㅎㅏㄴㅁㅣㄴㄱㅜㄱ! ㅋㅗㄹㅣㅇㅏㅌㅣㅁ ㅍㅏㅇㅣㅌㅣㅇ!
*           2002년 6월 월드컵 4강  -->  2002ㄴㅕㄴ 6ㅇㅝㄹ ㅇㅝㄹㄷㅡㅋㅓㅂ 4ㄱㅏㅇ
*
* @date     2002/08/03
* @author   Pilho Kim [phkim AT cluecom.co.kr]
*/

public class HangulDaro {

    final static String[] chosung = { "ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" };
    final static String[] moeum = { "ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ" };
    final static String[] badchim = { "", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" };

    public static String toDaro(String s) {
        if (s == null)
            return null;
        String t = "";
        String tmp = "";
        int n, n1, n2, n3;
        char c;
        for (int i = 0; i < s.length(); i++) {
            c = s.charAt(i);
            n = (int)(c & 0xFFFF);
            if (n >= 0xAC00 && n <= 0xD7A3) {
                n = n - 0xAC00;
                n1 = n / (21 * 28);
                n = n % (21 * 28);
                n2 = n / 28;
                n3 = n % 28;
                tmp = chosung[n1] + moeum[n2] + badchim[n3];
                t += tmp;
            }
            else {
                t += c;
            }
        }
        return t;
    }

    public static void main(String[] args) {
        String data = "대-한민국! 코리아팀 파이팅!";
        System.out.println(data + " --> " + toDaro(data));
        String data2 = "2002년 6월 월드컵 4강";
        System.out.println(data2 + " --> " + toDaro(data2));
    }
}

 

http://www.javaclue.org/pub/java/hangul/HangulDaro.java.txt

No comments: