Thursday, July 02, 2009

초성의 일부를 교환하는 예제

 

/**
*
*  초성 19개:   ㄱ   ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
*  중성 21개:   ㅏ   ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
*  종성 28개:  Fill  ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ
*
*  유니코드 2.0 한글의 범위
*      AC00(가) ~ D7A3(힣)
*
*  유니코드 2.0 한글의 초성 바꾸기(swapping)
*      ㄱ  <-->  ㅋ
*      ㄷ  <-->  ㅌ
*      ㅂ  <-->  ㅃ
*      ㅈ  <-->  ㅉ
*/

public class HangulChosungSwap {

                           // {  0, 1, 2,  3, 4, 5, 6,  7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 };
    final static int[] toKK = { 15, 1, 2, 16, 4, 5, 6, 17, 8, 9, 10, 11, 14, 13, 12,  0,  3,  7, 18 };

    public static String swapCho(String s) {
        if (s == null)
            return null;
        String t = "";
        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;
                n = 0xAC00 + (toKK[n1] * 21 * 28) + (n2 * 28) + n3;
                t += (char)n;
            }
            else
                t += c;
        }
        return t;
    }

    public static void main(String[] args) {
        String data = "한글, 봉이 김선달";
        System.out.println(data + " --> " + swapCho(data));
        String data2 = "부엌칼, 찰떡 궁합";
        System.out.println(data2 + " --> " + swapCho(data2));
        String data3 = "잔잔한 바다 물결~";
        System.out.println(data3 + " --> " + swapCho(data3));
        String data4 = "평화로운 고향 마을...";
        System.out.println(data4 + " --> " + swapCho(data4));
    }
}

 

http://www.javaclue.org

No comments: