2011-03-18 1 views
3

지난 2 시간 동안 나는 내 데이터베이스에서 미끄러 져 버린 태국어 스크립트 문자열로 많은 섹시한 시간을 보냈습니다. 신비하게 대조하고 산출물을 돌연변이 시키며 자연 질서가없고 재앙입니다. Java에서 태국어 스크립트 문자와 일치

난 그냥 타이어 스크립트 문자가 포함 된 모든 문자열을 무시하고 싶지만 방법을 모르고 있습니다 :

Pattern.compile("\\p{Thai}")

가 초기화에 실패합니다. "[ก-๛]" - 그게 효과가 있습니까? 올바른 방법은 무엇입니까?

+1

* "나는 섹시한 시간이 많다 ..."* 확실한 섹시한 단어가 당신이 찾고 있던 단어였습니까? –

+0

http://www.urbandictionary.com/define.php?term=sexy+time – alamar

+0

어떻게 적용되는지는 알지 못하지만 괜찮습니다. :-) –

답변

6

Thai 유니 코드 블록이며, 유니 코드 블록은 \p{In...}로 지정해야합니다 : 유니 코드 스크립트를 의미 할 때 유니 코드 블록을 사용해서는 안

Pattern.compile("\\p{InThai}") 
+0

+1 테스트 컴파일/실행을 시도했습니다. 내 대답을 upvoting 및 삭제하기 전에 확인하십시오. '패턴'은 위와 함께 행복했다. –

+1

@Daniel : 10 년 전 Unicode가 작년의 6.0까지였던 Unicode 3.0 목록은 무엇이 좋을까요? : ( – tchrist

5

. 예를 들어 유니 코드의 코드 포인트 U + 0E3F THAI CURRENCY SYMBOL BAHT 인 ฿은 \p{Block=Thai} ᴀᴋᴀ \p{InThai} 문자이지만 \p{Script=Thai} ᴀᴋᴀ \p{IsThai} 문자는 아닙니다. \p{Script=Common} 통화 기호입니다.

그리스어와 같은 대형 세트의 경우 특히 그렇습니다. 그리스어 블록에는 그리스어 스크립트에없는 18 개의 코드 포인트가 있으며 그리스어 블록에는없는 250 개의 코드 포인트가 있습니다.

다행히도 Unicode 6.0부터는 U + 0E3F만이 이상치가되었습니다. 다행히도 여기서는 Thai에 대해 걱정할 필요가 없습니다. 표준 Java는 Java 7 이전의 유니 코드 스크립트를 지원하지 않기 때문에 이중에서 운이 좋았습니다. 기괴하지만 사실. JDK7 이전의 유니 코드 스크립트 지원의 경우 JNI를 사용하여 Android에서 Java 용 Google과 마찬가지로 ICU regex 라이브러리를 사용해야합니다. 그들의 appoach에 많은 이득이있다, 그래서 비록 그것이 JNI이더라도 고려할 가치가 있을지도 모르다.

+0

나는 자바에 관한 질문을 알고 있지만 Perl의 경우 5.6 이후 버전은 \ p {Script}를'\ p {Thai}'('\ p {IsThai}')로 쓸 수있다. 하위 호환성). –