티스토리 뷰

Computer/JAVA

[JAVA] String Language Detect

jamezc 2020. 8. 9. 23:49

 

[JAVA] String Language Detect

Charsequence 를 parameter 전달하는 경우 사용 할 수 있는 간단한 함수입니다.

English / Korean / Japanese 의 언어인지를 확인하여 True/False 를 Return 합니다.

해당 함수 내부에서 사용하는 char 을 비교해서 이용하는 부분을 활용해서 용도에 맞게 사용해도 됩니다. 

 

/**
 * Created by TheFinestArtist on 2014. 9. 2..
 */
public class LanguageDetector {

    public enum Language {Korean, Japanese, English}

    public static boolean isEnglish(CharSequence charSequence) {
        boolean isEnglish = true;
        for (char c : charSequence.toString().toCharArray()) {
            if (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) {
                isEnglish = false;
                break;
            }
        }

        return isEnglish;
    }

    public static boolean hasKorean(CharSequence charSequence) {
        boolean hasKorean = false;
        for (char c : charSequence.toString().toCharArray()) {
            if (Character.UnicodeBlock.of(c) == Character.UnicodeBlock.HANGUL_JAMO
                    || Character.UnicodeBlock.of(c) == Character.UnicodeBlock.HANGUL_COMPATIBILITY_JAMO
                    || Character.UnicodeBlock.of(c) == Character.UnicodeBlock.HANGUL_SYLLABLES) {
                hasKorean = true;
                break;
            }
        }

        return hasKorean;
    }

    public static boolean hasJapanese(CharSequence charSequence) {
        boolean hasJapanese = false;
        for (char c : charSequence.toString().toCharArray()) {
            if (Character.UnicodeBlock.of(c) == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                    || Character.UnicodeBlock.of(c) == Character.UnicodeBlock.HIRAGANA
                    || Character.UnicodeBlock.of(c) == Character.UnicodeBlock.KATAKANA
                    || Character.UnicodeBlock.of(c) == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
                    || Character.UnicodeBlock.of(c) == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
                    || Character.UnicodeBlock.of(c) == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION) {
                hasJapanese = true;
                break;
            }
        }

        return hasJapanese;
    }

}

 

혹은 위 English 체크문에서 특수문자, 숫자, 기호 들이 포함된 경우도 LATIN 에 포함되기 때문에

아래와 같이 ASCII Code가 영어 인지만 체크해줄수도 있습니다.

이와 유사하게 ASCII 코드를 활영해서 특수문자 범위만을 체크해서 사용 할 수도 있습니다.

if ( (MsgCharacter >= 65) && (MsgCharacter <= 90)
	|| ((MsgCharacter >= 97) && (MsgCharacter <= 122))) {
	Log.d(TAG, FUNC + "MsgCharacter=" + Character.toString(MsgCharacter) + " is English");
}

 

 

댓글

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음



Total
Today
Yesterday
최근에 달린 댓글