3

この 2 時間、データベースに取り込まれたタイ語スクリプトの文字列と楽しい時間を過ごしました。それらは神秘的に照合され、出力時に変異し、自然な秩序がなく、災害です。

タイ語のスクリプト文字を含む文字列を無視したいのですが、方法がわかりません:

Pattern.compile("\\p{Thai}")初期化で失敗します。"[ก-๛]"-それはうまくいきますか?正しい方法は何ですか?

4

2 に答える 2

9

Thaiは Unicode ブロックであり、Unicode ブロックは次のように指定する必要があります\p{In...}

Pattern.compile("\\p{InThai}") 
于 2011-03-18T12:45:03.400 に答える
5

Unicodeスクリプトを意味する場合は、Unicodeブロックを使用しないでください。たとえば、UnicodeのコードポイントU + 0E3F THAI CURRENCY SYMBOL BAHTである฿はᴀᴋᴀ文字ですが、ᴀᴋᴀ\p{Block=Thai}文字\p{InThai}ではありません。セットの通貨記号です。\p{Script=Thai}\p{IsThai}\p{Script=Common}

これは、ギリシャ語のような大きなセットに特に当てはまります。ギリシャ文字には18個のコードポイントがあり、ギリシャ文字には含まれていません。また、ギリシャ文字には250個のコードポイントがあり、ギリシャ文字には含まれていません。

幸い、ここでタイ語を使用している場合は心配する必要はありません。Unicode6.0の時点では、U+0E3Fだけがここで外れ値になっているためです。標準のJavaはJava7より前のUnicodeスクリプトをサポートしていないため、これには二重の幸運があります。奇妙ですが本当です。JDK7より前のリリースでUnicodeスクリプトをサポートするには、GoogleがAndroid上のJavaに対して行うのと同じように、JNIを使​​用してICU正規表現ライブラリを取得する必要があります。ただし、彼らのアプローチには多くの利点があるため、JNIであっても、検討する価値があるかもしれません。

于 2011-03-18T13:19:45.407 に答える