嗨,我正在开发韩国Android应用程序。
这里我实现了一个带有字母部分标题的listview来显示联系人。我使用String类的substring方法将第一个字母作为节头。对于韩国联系人,我也使用子串方法取第一个字母。在这里,我需要将朝鲜语首字母显示为ㄱㄴㄷㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎㅎ与韩语联系人的第一个字母相关。我真的不知道韩国联系人名单的哪个首字母与这些韩文首字母匹配。
所以,请帮助我如何做到这一点或给我参考跟随......
先谢谢..
答案 0 :(得分:5)
我不认为在韩国应用程序中从一个初始角色获得intellisense是不正常的行为 - 通常似乎是用完整的Jamo完成的。但是,我认为没有理由不这样做 - 所以我们就这样做。
首先,你错过了双重缩写。这些与单曲不同,因为它们需要不同的按键(通常是移位+字符)。无论如何,你的姓名首字母应该是:
ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ
输入首字母时,您需要做的第一件事是获取以该特定首字母开头的字符范围。
通过查看Windows字符映射,我可以看到第一个字母Ka(가)位于Unicode点0xAC00
(或十进制,44032
),因此要获得任何范围,这个值必须添加到我们所做的任何计算中。所以你应该有一个名为FirstLetter
或其他的常量,它的值应该是44032
。
까位于0xAE4C
(或十进制44620
),所以我们现在有一个乘数(即以任何特定首字母开头的字符数 - 对于所有首字母都是相同的,所以这是44620-44032
588
。
我们现在有足够的信息来实现您的智能感知。如果你在数组中有初始主义,我们可以使用该数组中类型字符的索引来查找以它开头的字符范围。
因此,如果我们从start开始,我们显然想要从가到return返回所有内容。全部588个。所以ㄱ给我们一个'0',所以我们有
startCodePoint = index * 588 + 44032
// = 0 * 588 + 44032 == 44032 == 가
endCodePoint = (index + 1) * 588 + 44032
// this will include 까
然后你可以通过检查
检查特定字符是否以'ㄱ'开头if(charcode >= startCodePoint && charcode < endCodePoint) { ... }
其中charcode
是智能感知列表中某个项目的第一个字符。
使用类似的方法找出如何检查一个角色以'가'开头。所有内容都按Unicode排序,因此这是一项非常简单的任务。
要获取任何字符的首字母,您可以反过来使用上述公式。
即
e.g。
String initials = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ";
int value = character.codePointAt(0);
value = (value - 44032) / 588;
String initial = initials.substring(value, 1);
答案 1 :(得分:-1)
国际方法是获取Unicode int代码。这通常可能超过一个16位字符。
int codePoint = strng.codePointAt(0);
int indexToRest = Character.charCount(codePoint); // For your information