私はそれだけでintial文字からインテリセンスを持っている韓国語アプリで正常な行動だとは思わない - それは通常、フルの字母で行われているようです。しかし、私はあなたがそれをしてはならない理由を見ない - そうすることができます。
最初に、ダブルイニシャルを忘れました。これらはシングルとは異なり、異なるキーを押す必要があります(通常はシフト+文字)。とにかく、イニシャルのリストは以下のようになります。
ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ
あなたが最初のがで入力されたときに実行する必要がある最初の事は、その特定の初期で始まる文字の範囲を取得することです。
Windowsの文字マップを見ると、最初の文字Ka(は)はUnicodeポイント0xAC00
(または小数点以下は44032
)ですので、この値を追加する必要があります私たちが行う計算に。したがって、定数はFirstLetter
などとし、その値は44032
である必要があります。
까0xAE4C
(または小数44620
)であるので、私たちは今、すなわち任意の特定の初期から始まる文字の数(乗数を持っている - 。それは588
ある44620-44032
あるので、すべてのイニシャルでも同じです
は、私たちは今、あなたのインテリセンスを実装するのに十分な情報を持っている。あなたは、アレイ内のINITIALISMSを持っている場合、我々はそれで始まる文字の範囲を見つけるために、その配列で入力した文字のインデックスを使用することができます。
もしそうなら私たちはㄱから始まり、明らかにすべてのものを君からreturnに戻したいと思っています。そのうち588人全員が、私たちに '0'、s O私たちは、あなただけの特定の文字がcharcode
があなたのインテリセンスリストの項目の1の最初の文字である
if(charcode >= startCodePoint && charcode < endCodePoint) { ... }
をチェックして「ㄱ」で始まることを確認することができます
startCodePoint = index * 588 + 44032
// = 0 * 588 + 44032 == 44032 == 가
endCodePoint = (index + 1) * 588 + 44032
// this will include 까
を持っています。
同様の方法論を使って、キャラクターが「ガー」と言うことから始まるかどうかを確認する方法を調べます。すべてがUnicodeで整っているので、これは非常に簡単な作業です。
任意の文字の最初の文字を取得するには、上記の式を逆に使用できます。
すなわち
- 最初の文字(例えば각)のUnicode値を取得
- この値から減算44032。
- この値を588で割ります。
- この値をインデックスとして使用して、イニシャルのリストから初期文字を取得します。
String initials = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ";
int value = character.codePointAt(0);
value = (value - 44032)/588;
String initial = initials.substring(value, 1);
便利なWRITEUP:http://gernot-katzers-spice-pages.com/var/korean_hangul_unicode.html – JDong