2012-05-06 7 views
3

こんにちは、私は韓国のアンドロイドアプリに取り組んでいます。韓国のイニシャルへの変換方法

ここでは、連絡先を表示するためにアルファベットセクションヘッダーでリストビューを実装しました。最初の文字をセクションヘッダとして取得するためにStringクラスの部分文字列メソッドを使用しました。韓国の連絡先についても、最初の文字を部分文字列の方法で取得しています。ここで韓国人の頭文字を韓国の連絡先の最初の手紙を尊重して、ㄱㄴㄷㄹㄹㅂㅅㅇㅈㅊㅋㅌㅍㅎと表示する必要があります。私は、韓国のコンタクトリストの最初の手紙がこれらの韓国語の頭文字と一致するかどうかは分かりません。

だから、国際的な方法は、Unicodeのint型のコードをフェッチすることである

+0

便利なWRITEUP:http://gernot-katzers-spice-pages.com/var/korean_hangul_unicode.html – JDong

答えて

5

私はそれだけで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で整っているので、これは非常に簡単な作業です。


任意の文字の最初の文字を取得するには、上記の式を逆に使用できます。

すなわち

  1. 最初の文字(例えば각)のUnicode値を取得
  2. この値から減算44032。
  3. この値を588で割ります。
  4. この値をインデックスとして使用して、イニシャルのリストから初期文字を取得します。

String initials = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ"; 
int value = character.codePointAt(0); 
value = (value - 44032)/588; 
String initial = initials.substring(value, 1); 
+0

こんにちはヴィンセント、あなたの迅速な対応のためにsomuchありがとう。私は認識しない韓国語です。上記の方法は全く新しいものです。私は本当にあなたが「最初にダブルイニシャルを見逃しました」と言っています。 「あなたがイニシャルが入力されたときに最初にやるべきことは、そのイニシャルから始まる文字の範囲を取得することです」と言っています。 「Windowsキャラクタマップ」と「ユニコードポイント」があります。 FYI、ここに何も入力していない。私は電話連絡先の名前を取得し、最初の文字をlistviewのセクションヘッダーとして取得します。この回答は私のために働くようですが、 – praveenb

+0

私はそれを使用する方法を理解していません....あなたは私にいくつかの説明を与えるか、私にいくつかの参照を与えることができますか... – praveenb

+0

私はここで同じ種類の説明を参照してくださいこのリンクもhttp://dotnetpower.tistory.com/20 ...私はJavaで同じことをやり遂げることはできません。 – praveenb

-1

..私はこれを行うか、私に...事前に

感謝を追跡するための基準を与えることができますどのように私を助けてください。これは、一般的には1つ以上の16ビットのcharである可能性があります。

int codePoint = strng.codePointAt(0); 
int indexToRest = Character.charCount(codePoint); // For your information 
+1

韓国では、これは5つまでで構成された合成済み文字である全音節のブロックを取得しますjamoと呼ばれる手紙。営業担当者は、最初の文字/ jamoのみを取得するよう具体的に求めていました。これは、[Unicode正規化フォームD](http://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)に変換し、最初の文字を取得することと同じです。 – hippietrail

関連する問題