在 Android 联系人应用程序(或人脉应用程序)中,联系人姓名之前会显示一个部分。例如
A
a1
a2
B
b1
b2
这里A和B(以粗体显示)是部分。 a1、a2、b1、b2 是联系人姓名。他们如何获得部分字符?对于上面的示例,它很简单,因为您可以在 java 代码中使用 "a1".chatAt(0) 提取第一个字符,然后将其大写。但请考虑以下示例:
A
一个
-
B
b1
b2
在此示例中,如果您尝试使用“œ”.charAt(0) 提取 java 中的第一个字符,它将返回“œ”而不是“a”。我怎样才能知道“a”是这个的基本字符?
请注意,我想支持所有语言,这些语言也会出现类似的问题。有人可以告诉我适用于所有语言的解决方案吗?
最佳答案
没有不依赖于语言的方法。
考虑姓氏Ö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;
}
}
不要忘记使用相同的排序器对“第一个字母”和每个字母下的名称进行排序。
关于java - 如何获取以派生字符开头的名称的节字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25448057/