/**
*
* 초성 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));
}
}
No comments:
Post a Comment