Skip to content

Java.lang.String:InitialConsonant

초성 - initial[beginning] consonant (in a Korean orthographic syllable) -과 관련된 클래스 구현 설명.

InitialConsonant class

정규표현식을 사용하여 초성검색하는 클래스 구현체는 아래와 같다.

package -;

import com.google.common.base.Strings;

/**
 * 초성검색과 관련된 유틸리티성 메서드 추출.
 * 
 * <p>
 * <h2>사용방법은 아래와 같다.</h2>
 * {@code String regexp =
 * InitialConsonant.getInitialConsonantRegexp(search.trim());
 * if (cursor.matches(regexp) == true) // 조건검색으로 사용.
 * }
 * </p>
 * 
 * @author cwlee
 * @since 131217
 */
public class InitialConsonant {

    public InitialConsonant() {
        throw new UnsupportedOperationException();
    }

    /** 초성 문자열 목록. */
    public static final char[] INITIAL_CONSONANT = { 'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ',
            'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ',
            'ㅎ' };

    /** 초성 문자인가? */
    public static boolean isInitialSound(char value) {
        for (char cursor : INITIAL_CONSONANT) {
            if (value == cursor) {
                return true;
            }
        }
        return false;
    }

    /** 1개 문자에 대한 초성문자에 해당하는 정규표현식을 검출한다. */
    public static String getSingleInitialConsonantRegexp(char value) {
        switch (value) {
        case 'ㄱ':
            return "[가-깋]";
        case 'ㄲ':
            return "[까-낗]";
        case 'ㄴ':
            return "[나-닣]";
        case 'ㄷ':
            return "[다-딯]";
        case 'ㄸ':
            return "[따-띻]";
        case 'ㄹ':
            return "[라-맇]";
        case 'ㅁ':
            return "[마-밓]";
        case 'ㅂ':
            return "[바-빟]";
        case 'ㅃ':
            return "[빠-삫]";
        case 'ㅅ':
            return "[사-싷]";
        case 'ㅆ':
            return "[싸-앃]";
        case 'ㅇ':
            return "[아-잏]";
        case 'ㅈ':
            return "[자-짛]";
        case 'ㅉ':
            return "[짜-찧]";
        case 'ㅊ':
            return "[차-칳]";
        case 'ㅋ':
            return "[카-킿]";
        case 'ㅌ':
            return "[타-팋]";
        case 'ㅍ':
            return "[파-핗]";
        case 'ㅎ':
            return "[하-힣]";
        }
        return String.valueOf(value);
    }

    /** 문자열에 대한 초성문자검색 정규표현식을 검출한다. */
    public static String getInitialConsonantRegexp(String search) {
        final String kAnything = ".*";

        StringBuilder regexp = new StringBuilder();
        regexp.append(kAnything);
        if (Strings.isNullOrEmpty(search) == false) {
            for (char cursor : search.toCharArray()) {
                if (isInitialSound(cursor) == true) {
                    regexp.append(getSingleInitialConsonantRegexp(cursor));
                } else {
                    regexp.append(cursor);
                }
            }
        }
        regexp.append(kAnything);
        return regexp.toString();
    }
}