- 전체
- JAVA 일반
- JAVA 수학
- JAVA 그래픽
- JAVA 자료구조
- JAVA 인공지능
- JAVA 인터넷
- Java Framework
- Java GUI (AWT,SWING,SWT,JFACE)
- SWT and RCP (web RAP/RWT)[eclipse], EMF
JAVA 자료구조 Java 예제: 한글 초성 중성 종성 분리 (자모분리)
2019.12.11 17:16
Java 예제: 한글 초성 중성 종성 분리 (자모분리)
유니코드의 특성을 이용해 자모분리합니다. 예를 들면 ‘간’이라는 글자를 ㄱ, ㅏ, ㄴ 으로 분리하는 예제입니다.
유니코드 한글은
0xAC00으로부터 초성 19개, 중상21개, 종성28개로 이루어지고 이들을 조합한 11,172개의 문자를 갖는다.
한글코드의 값 = ((초성 * 21) + 중성) * 28 + 종성 + 0xAC00
(0xAC00은 ‘ㄱ'의 코드값)따라서 다음과 같은 계산 식이 구해진다.
유니코드 한글 문자 코드 값이
X일 때,
초성 = ((X - 0xAC00) / 28) / 21
중성 = ((X - 0xAC00) / 28) % 21
종성 = (X - 0xAC00) % 28이 때 초성, 중성, 종성의 값은 각 소리 글자의 코드값이 아니라 이들이 각각 몇 번째 문자인가를 나타내기 때문에 다음과 같이 다시 처리한다.
초성문자코드 = 초성 + 0x1100//(‘ㄱ’)
중성문자코드 = 중성 + 0x1161// (‘ㅏ’)
종성문자코드 = 종성 + 0x11A8 - 1// (종성이 없는 경우가 있으므로 1을 뺌)
- import java.util.ArrayList;
- import java.util.List;
- import org.springframework.stereotype.Component;
- @Component
- public class UnicodeHandler {
- private static final int HANGEUL_BASE = 0xAC00; // '가'
- private static final int HANGEUL_END = 0xD7AF;
- // 이하 cho, jung, jong은 계산 결과로 나온 자모에 대해 적용
- private static final int CHO_BASE = 0x1100;
- private static final int JUNG_BASE = 0x1161;
- private static final int JONG_BASE = (int)0x11A8 - 1;
- // 이하 ja, mo는 단독으로 입력된 자모에 대해 적용
- private static final int JA_BASE = 0x3131;
- private static final int MO_BASE = 0x314F;
- /* https://gist.github.com/thirdj/5333532
- */
- public List<Character> splitHangeulToConsonant(String text) {
- List<Character> list = new ArrayList<>();
- for(char c : text.toCharArray()) {
- System.out.println(c + "|" + (int)c);
- if((c <= 10 && c <= 13) || c == 32) {
- list.add(c);
- continue;
- } else if (c >= JA_BASE && c <= JA_BASE + 36) {
- list.add(c);
- continue;
- } else if (c >= MO_BASE && c <= MO_BASE + 58) {
- list.add((char)0);
- continue;
- } else if (c >= HANGEUL_BASE && c <= HANGEUL_END){
- int choInt = (c - HANGEUL_BASE) / 28 / 21;
- int jungInt = ((c - HANGEUL_BASE) / 28) % 21;
- int jongInt = (c - HANGEUL_BASE) % 28;
- char cho = (char) (choInt + CHO_BASE);
- char jung = (char) (jungInt + JUNG_BASE);
- char jong = jongInt != 0 ? (char) (jongInt + JONG_BASE) : 0;
- list.add(cho);
- list.add(jung);
- list.add(jong);
- } else {
- list.add(c);
- }
- }
- return list;
- }
- }
- @RequestMapping("/splitDemo")
- @ResponseBody
- public String splitHangeulDemo(String text) throws Exception {
- text = "아햏햏 가나다R디릴맇 률흏 ㄵ ㅄ 럃뱗갸꺎 끼누뒉 눼";
- List<Character> charList = uh.splitHangeulToConsonant(text);
- StringBuilder sb = new StringBuilder();
- for(char c : charList) {
- System.out.println(c + "|" + (int)c);
- sb.append(c + ".");
- }
- return "<pre>" + text + "\n" + sb.toString() + "</pre>";
- }
[출처] http://yoonbumtae.com/?p=745
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 6 |
java4autocad Java for Autocad
| 졸리운_곰 | 2017.04.26 | 387 |
| 5 | Java3D and Eclipse | 졸리운_곰 | 2015.08.12 | 317 |
| 4 |
Draw2d Intro
| 졸리운_곰 | 2015.07.29 | 514 |
| 3 |
FreeLayout: A New Java Layout
| 졸리운_곰 | 2015.05.14 | 315 |
| 2 |
XML file to Treeviewer
| 졸리운_곰 | 2015.03.19 | 399 |
| 1 |
Java GUI(AWT) 프로그래밍
| 졸리운_곰 | 2015.03.09 | 938 |

