今天我注意到,在Google's Contacts app上,如果您既有英语联系人又有希伯来语联系人,并且您将英语切换为主要语言环境,则第一个联系人是英语:
但是,如果您将希伯来语语言环境设置为主要语言环境,则第一个联系人将在希伯来语中:
我看不到使用了哪些功能。我试图在Internet上搜索此行为及其行为,但找不到它。
比较字符的值将始终返回相同的结果,因此此处的顺序应更加动态。
我认为这将对我有帮助:
val unicodeLocaleKeys = Locale.getDefault().unicodeLocaleKeys
但是它总是返回一个空集。
我也在诸如Character,Unicode *和String之类的类中搜索了此类函数。我认为它不存在。
Google通讯录应用如何通过当前语言环境对联系人进行排序?
是否有可能获得特定语言环境使用的整个字符集?
也许可以比较字符,同时给出语言环境的优先级顺序(用户可以选择多个语言环境)?
答案 0 :(得分:0)
也许您在找错东西。
Contact应用似乎没有内置的字母(按区域设置),而只是排序规则(本地排序)并显示第一个字符。可能会找到“符号”(Unicode类别)并将所有符号放在同一个 bin 中。
最终,您可以从Unicode获得脚本名称(和方向)。您可能会在几个地方获得字母(例如Wikipedia)。对于中文和其他丰富的字母表,此操作将失败。问题:“字母”是特定于语言的。在某些欧洲国家/地区,您可能会使用(某些)带重音符号的字符,或者将字符组解释为单个字符(在电话簿中也是如此)。
因此,如果您想保持简单:
使用排序规则,仅使用第一个字符
相同,但要删除重音符号,并尝试查找字母是否具有相同的字母顺序优先级:在这种情况下:忽略重音符号,否则:保留重音符号,例如Å - place in alphabet。也许用两个字母做同样的事情,例如ll。
找到一个处理此类复杂情况的库(并将定期进行更新)。这可能对中文和其他具有大量字符的语言有所帮助。
编辑:简而言之,应该使用:
而不是使用str1.compareTo(str2)
对字符串进行常规排序。
Collator.getInstance().compare(str1,str2)