在Android联系人应用程序(或人员应用程序)中,会在联系人姓名之前显示一个部分。 e.g。
A1
A2
B1
B2
这里A和B(以粗体显示)是部分。和a1,a2,b1,b2是联系人姓名。他们如何获得部分角色?对于上面的例子,它很简单,因为您可以在java代码中使用“a1”.chatAt(0)提取第一个字符,然后将其大写。但请考虑以下示例:
一个
œ
B1
B2
在此示例中,如果您尝试使用“œ”.charAt(0)在java中提取第一个char,它将返回“ - ”而不是“a”。我怎样才能知道'a'是这个的基本特征?
请注意,我希望支持所有语言,并且这些语言也会出现类似问题。有人可以告诉解决方案适用于所有语言。
答案 0 :(得分:1)
没有不依赖于语言的方法。
考虑姓氏Ölerman
:
英文版,您希望将其置于 O 之下,Oldschool
与Omsky
之间
在德语中,您希望将其置于 O 之下,Oderman
与Offspring
之间
用瑞典语,你想把它放在Ö下,在字母表的最后,XYZÅÄ
,您希望将其置于Ö之间, O 和 P 之间
因此,您需要为用户的语言选择合适的校对算法。
至于获得“第一个字母”,我认为这可能是一个好的开始:
// I recommend using ICU4J for collation instead
Collator coll = Collator.getInstance(userLocale);
char result = Character.toUppercase(name.charAt(0));
String key = name.charAt(0) + "a";
for(char c = 'A', c <= 'Z'; c++) {
String cs = Character.toString(c);
if(coll.compare(cs, key)<0 && coll.compare(key,cs+"z")<0){
result = c;
break;
}
}
不要忘记使用相同的整理器对每个字母下的“第一个字母”和名称进行排序。