java - 如何获取以派生字符开头的名称的节字符

标签 java android string unicode text-formatting

在 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 下,位于 OldschoolOmsky 之间

  • 在德语中,您需要将其放在 O 下,位于 OdermanOffspring 之间

  • 在瑞典语中,您需要将其放在字母表末尾的 Ö 下、XYZÅä 之后

  • 在土耳其语中,您需要将其放在 Ö 下、OP 之间

因此您需要为用户的语言选择合适的排序算法。

至于获得“第一个字母”,我认为这可能是一个好的开始:

// 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/

相关文章:

java - Codingbat.com 上的 catDog 字符串问题

java - Android 自定义按钮监听器没有被调用

r - 填充数据框 R 中缺失的字符串值

java - 如何从不同的 XML 更改 ImageView 源?

android - StoreData甚至手机重启

Java 将带有换行符的字符串拆分为数组,其中使用缓冲读取器从文件中读取字符串

java - 如何通过发送和接收数据包手动获取网站的 IP 地址抛出 Google DNS、OpenDNS...

java - 如何在 NetBeans IDE 中添加外部库?

java - Play Framework @routes.Assets.at 编译错误

android - ListView 中 View 上的动画