美文网首页
初步认识Collator

初步认识Collator

作者: shengjk1 | 来源:发表于2020-02-24 16:51 被阅读0次

1.Collator是什么?
主要是用来对区域敏感性的字符串比较的,对本地化字符串进行排序。
什么是区域敏感性字符串呢?比如中文,比如 ß,在德语中,你可能希望 ß (\u00DF) 被当作 b 或者 B 来进行排序,但事实上在该语言中 ß 的排序值高于正常的 s。再比如比较 "a", "à"。

2.为什么使用 Collator?
类Collator用于对语言敏感的排序问题,并不会只基于它们的ASCII/Unicode字符去尝试排序。使用Collator要求你在完全应用它的特性之前要理解一个额外的属性,即称之为强度(Strength)的属性。Collator的强度设置决定了在排序时如何使用强(或弱)匹配。

该属性有4个可能的值:PRIMARY,SECONDARY,TERTIARY和IDENTICAL。具体是哪个强度在产生作用取决于语言环境。 典型地,会有如下的情况。按从后往前的顺序,IDENTICAL强度表示能够被进行相同的处理的字符必须是一致的。TERTIARY通常用于忽略大小写差异。SECONDARY用于忽略变音符,如n和ñ。 PRIMARY与IDENTICAL相似也是基于字母之间差异,但是当处理控制字符和发音时还是有所不同。

3.排序样例

#中文排序
 ArrayList<String> list = new ArrayList<String>();
    list.add("一鸣惊人-Y");
    list.add("人山人海-R");
    list.add("海阔天空-H");
    list.add("空前绝后-K");
    list.add("后来居上-H");
    
    Comparator<Object> cmp = Collator.getInstance(java.util.Locale.CHINA);
    
    Collections.sort(list, cmp);
    for (String str : list) {
        System.out.println(str);
    }
/*
    更深层次的原因是Java使用的是UNICODE编码,而中文UNICODE字符集是源于GB18030的,GB18030又是从GB2312发展起来的,GB2312是一个包含了7000多个字符的字符集,它是按照拼音排序,并且是连续的.
之后的GBK,GB18030都是在其基础上扩充起来的.
如果是排序对象是经常使用的汉字,使用Collator类排序完全可以满足我们的需求.毕竟GB2312已经包含了大部分的汉字,如果需要严格排序,则要使用一些开源项目来自己实现了.
*/

4.其他正常的排序方式

#数字排序
List<Integer> list = new ArrayList<Integer>();
    // 插入元素
    list.add(2);
    list.add(0);
    list.add(3);
    list.add(4);
    list.add(1);
    Collections.sort(list);
    for (int i : list) {
        System.out.println(i);
    }

#实体类排序
public class TextList {
    public static void main(String[] args) {
        List<User> userlist = new ArrayList<User>();
        userlist.add(new User("Y - 易小星 ", 33));
        userlist.add(new User("W - 王大锤", 33));
        Comparator<User> cmp = new ComparatorUser();
        Collections.sort(userlist, cmp);
        for (User user : userlist) {
            System.out.println(user.getName());
        }
    }
}
class ComparatorUser implements Comparator<User> {
    @Override
    public int compare(User u1, User u2) {
        // 先按年龄排序
        int flag = u1.getAge().compareTo(u2.getAge());
        // 年龄相等比较姓名
        if (flag == 0) {
            return u1.getName().compareTo(u2.getName());
        } else {
            return flag;
        }
    }
}
class User {
    private String name;
    private Integer age;
    public User() {
        super();
    }
    public User(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

相关文章

  • 初步认识Collator

    1.Collator是什么?主要是用来对区域敏感性的字符串比较的,对本地化字符串进行排序。什么是区域敏感性字符串呢...

  • 汉字字母数字排序

    汉字字母数字排序 Collator Collator 用来简化我们处理各种语言之间的差别性。Collator 主要...

  • 初步认识

    初识C语言 开始 我从高三毕业假期开始涉及C语言学习,经过了九个月左右的学习,初步认识了这种语言的语法和具体特质。...

  • 在排序中,给对象按照拼音排序

    Comparator CHINA_COMPARE = Collator.getInstance(java.uti...

  • BOM初步认识

    什么是BOM BOM:Browser Object Model 浏览器对象模型BOM是JavaScript组成之一...

  • 初步认识zookeeper

    什么是zookeeper zookeeper 是一个开源的分布式协调服务,由雅虎公司创建,是google chub...

  • [ZooKeeper]初步认识

    前言在学习任何技术知识的时候,一定要思考他的本质!3w原则想必都听过:why、what、how。大why,小wha...

  • 初步认识TCGA

    转自生信笔记http://www.bioinfo-scrounger.com/archives/271 肿瘤基因组...

  • Fiddler初步认识

    1、抓包工具有很多,为什么要使用Fiddler呢?原因如下: a.Firebug虽然可以抓包,但是对于分析http...

  • 初步认识“运营”

    运营一直以来给我的感觉是一种很抽象的东西,他有点类似带团队、经营一个网店或项目。其实运营还真是五花八、各种各样 。...

网友评论

      本文标题:初步认识Collator

      本文链接:https://www.haomeiwen.com/subject/yycbqhtx.html