sitelink1 http://yoonbumtae.com/?p=745 
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  

참고: https://gist.github.com/thirdj/5333532

유니코드의 특성을 이용해 자모분리한다. 예를 들면 ‘간’이라는 글자를 ㄱ, ㅏ, ㄴ 으로 분리하는 예제이다.

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
      초성 중성 종성 분리 하기
        
        유니코드 한글은 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을 뺌)
     
    */
    
    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>";
}
번호 제목 글쓴이 날짜 조회 수
283 수치 데이터 처리 유틸리티 file 황제낙엽 2019.05.12 1907
282 한글 초성 중성 종성 분리 유틸리티(자작) file 황제낙엽 2019.05.07 525
» 한글 초성 중성 종성 분리 (자모분리) 황제낙엽 2019.05.07 458
280 한글 인코딩의 이해 1편: 한글 인코딩의 역사와 유니코드 황제낙엽 2019.05.07 501
279 한글 인코딩의 이해 2편: 유니코드와 Java를 이용한 한글 처리 file 황제낙엽 2019.05.07 509
278 응답 헤더의 Content-disposition 속성 황제낙엽 2019.04.16 824
277 StringUtils - 문자열 처리 유틸리티 file 황제낙엽 2019.04.15 517
276 JSON과 GSON 황제낙엽 2019.03.24 594
275 File.length() 에 대하여 황제낙엽 2019.03.24 523
274 File.delete() 와 File.deleteOnExit() 황제낙엽 2019.03.24 2602
273 List to Array / Array to List 황제낙엽 2019.03.24 412
272 Oracle JAVA 유료화에 관련한 최신 기사 황제낙엽 2019.01.23 472
271 [HttpURLConnection, HttpsURLConnection] 코드참조용 샘플프로젝트 secret 황제낙엽 2019.01.18 0
270 Iterator.next() - NoSuchElementException 황제낙엽 2018.10.28 639
269 OracleJDK 유료화 FAQ (Oracle Java 의 유료화에 대한 어느분의 정리) 황제낙엽 2018.10.11 492
268 메일서버(daum.net)에 POP3를 이용하여 메일 가져오기 예제 file 황제낙엽 2018.10.09 1325
267 Sending mail through Java using SMTP of gmail file 황제낙엽 2018.09.13 830
266 Read or get mails using pop in java (using gmail) file 황제낙엽 2018.09.13 11657
265 Collections.sort() , Comparator 황제낙엽 2018.08.23 556
264 JavaMail - Connecting Gmail pop3 server. 황제낙엽 2018.08.20 711