우찬쓰 개발블로그

안드로이드(자바, 코틀린 포함) 문자열 언어 감지하기 본문

안드로이드/안드로이드 개발

안드로이드(자바, 코틀린 포함) 문자열 언어 감지하기

이우찬 2019. 5. 26. 15:02
반응형

다국어 앱을 만들다보면, 유저가 입력한 문자열이 무슨 언어인지 알아야 할 때가 있다.

 

필자의 경우 번역기를 만드는데 해당 유저가 태국어를 입력한 것인지, 영어를 입력한 것인지, 한글을 입력한 것인지 알아야 했다.

 

관련 라이브러리를 찾아보니 성능적인 문제도 있고, 내가 필요한 언어만 지원하게 만들어 두지 않아서 마음에 들지 않았다.

 

그럼 간단하게 언어를 감지하는 법을 알아보자.

 

기본적으로 UTF-8 이라는 가정하에 진행한다.

 

fun isProbablyEnglish(s: String): Boolean {
    var i = 0
    while (i < s.length) {
        val c = s.codePointAt(i)
        if (c in 0x0041..0x007A)
            return true
        i += Character.charCount(c)
    }
    return false
}

fun isProbablyThai(s: String): Boolean {
    var i = 0
    while (i < s.length) {
        val c = s.codePointAt(i)
        if (c in 0x0E01..0x0E5B)
            return true
        i += Character.charCount(c)
    }
    return false
}

fun isProbablyKorean(s: String): Boolean {
    var i = 0
    while (i < s.length) {
        val c = s.codePointAt(i)
        if (c in 0xAC00..0xD800)
            return true
        i += Character.charCount(c)
    }
    return false
}

 

원리는 간단하다. 해당문자열의 각 문자당 UTF-8의 범위를 감지하여 이 문자가 어느 언어의 영역에 속해있는지 찾아낸다.

 

그래서 해당 문자열 안에 하나라도 그 범위안의 문자가 있으면 true를 반환한다.

 

워낙에 관련 자료가 없었기에.. 누군가는 도움이 되었으면 한다.

 

 

 

참조.

https://stackoverflow.com/questions/15107313/how-to-determine-a-string-is-english-or-arabic

 

How to determine a string is english or arabic?

Is there a way to determine a string is English or Arabic?

stackoverflow.com

 

반응형
Comments