本地化OR普通---Java中的字符串比较,按照使用习惯进行比较
来源:互联网 发布:最小的阅读软件 编辑:程序博客网 时间:2024/06/07 11:30
java中的字符串比较一般可以采用compareTo函数,如果a.compareTo(b)返回的是小于0的数,那么说明a的unicode编码值小于b的unicode编码值。但是很多情况下,我们开发一款app需要结合“国情”,比如在电话本中,我们希望“李四”排在“zhangsan”的前面,但是如果采用普通的compareTo函数的字符串比较的方式,那么“zhangsan”小于“李四”,由此造成了“zhangsan”的排序先于“李四”。
CollationKey
表示遵守特定 Collator
对象规则的 String
。比较两个 CollationKey
将返回它们所表示的 String
的相对顺序。使用 CollationKey
来比较 String
通常比使用 Collator.compare
更快。因此,当必须多次比较 String
时(例如,对一个 String
列表进行排序),使用 CollationKey
会更高效。
不能直接创建 CollationKey
。而是通过调用 Collator.getCollationKey
来生成。只能比较同一个 Collator
对象生成的 CollationKey
。
为一个 String
生成 CollationKey
涉及到检查整个 String
,并将它转换成可以按位比较的一系列位。一旦生成了键,就允许进行快速比较。当 String
需要多次比较时,以更快速的比较方式生成键的成本可以忽略不计。另一方面,比较的结果通常由每个 String
的第一对字符确定。Collator.compare
只检查实际需要比较的字符,当进行单次比较时,此比较方式更快。
解决方式是采用java提供的 Collator类。
实例出一个常见的通讯录列表,其中包含正常的名称,还有一些非正常的英文+数字(这种情况是比较常见的):
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
之后我们需要实例化 Collator,并获取当前语言环境,通过重写比较器 Comparator来调用 Collections.sort() 方法,代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
输出结果如下:
- 1
- 2
数字排在最前,英文字母其次,汉字则按照拼音进行排序。
阅读全文
0 0
- 解决win10什么也没做,但是一直占网速的问题
- less简要入门——变量
- 七月机器学习实战班培训视频教程22课高清长课时附ppt
- 编写第一个 Java 程序:
- BareTailProfessional实时刷新日志
- 本地化OR普通---Java中的字符串比较,按照使用习惯进行比较
- Java Date
- 赠书| 详解GPFS文件系统架构、组网和Building Block
- 独行快、众行远,一场架构师的专场汇
- Java SQL server 连接数据库
- Notepad++ 简介
- lxml导入到Pycharm失败
- 你可能不知道console强大
- Office CVE-2017-8570远程代码执行漏洞复现