Module  java.base
软件包  java.text

Class Collator

  • All Implemented Interfaces:
    CloneableComparator<Object>
    已知直接子类:
    RuleBasedCollator


    public abstract class Collator
    extends Object
    implements Comparator<Object>, Cloneable
    Collator类执行区域设置敏感String比较。 您使用此类来构建自然语言文本的搜索和排序例程。

    Collator是一个抽象的基类。 子类实现特定的整理策略。 一个子类, RuleBasedCollator ,目前提供了Java平台,适用于广泛的语言。 可以创建其他子类来处理更专门的需求。

    像其他语言环境敏感类,你可以使用静态工厂方法, getInstance ,以获得适当Collator对象为给定的语言环境。 您只需要查看Collator的子类,如果您需要了解特定整理策略的详细信息,或者您需要修改该策略。

    以下示例显示了如何使用默认语言环境的Collator来比较两个字符串。

    
     // Compare two strings in the default locale
     Collator myCollator = Collator.getInstance();
     if( myCollator.compare("abc", "ABC") < 0 )
         System.out.println("abc is less than ABC");
     else
         System.out.println("abc is greater than or equal to ABC");
     

    您可以设置一个Collator强度属性来确定在比较中被认为是重要的差异水平。 提供四个优势: PRIMARYSECONDARYTERTIARY ,并IDENTICAL 对语言特征的优势的确切分配取决于区域设置。 例如,在捷克语中,“e”和“f”被认为是主要差异,而“e”和“Ä”是次要差异,“e”和“E”是三级差异,“e”和“e”相同。 以下显示了美国英语的情况和口音如何被忽略。

     //Get the Collator for US English and set its strength to PRIMARY
     Collator usCollator = Collator.getInstance(Locale.US);
     usCollator.setStrength(Collator.PRIMARY);
     if( usCollator.compare("abc", "ABC") == 0 ) {
         System.out.println("Strings are equivalent");
     }
     

    为了比较String一次, compare方法提供最佳性能。 然而,当排序String的列表时,通常需要多次比较每个String 在这种情况下, CollationKey提供更好的性能。 所述CollationKey类转换String到一系列可以按位与其他进行比较的比特CollationKey秒。 A CollationKeyCollator对象为给定的String
    注意: CollationKey从不同的Collator s不能比较。 请参阅类描述CollationKey用于使用例如CollationKey秒。

    从以下版本开始:
    1.1
    另请参见:
    RuleBasedCollatorCollationKeyCollationElementIteratorLocale
    • 字段详细信息

      • PRIMARY

        public static final int PRIMARY
        整理器强度值。 当设定时,在比较期间只有PRIMARY差异被认为是重要的。 对语言特征的优势分配取决于区域设置。 一个常见的例子是将不同的基本字母(“a”对“b”)视为主要差异。
        另请参见:
        setStrength(int)getStrength()Constant Field Values
      • SECONDARY

        public static final int SECONDARY
        整理器强度值。 当设定时,在比较期间只有第二和以上的差异被认为是重要的。 对语言特征的优势分配取决于区域设置。 一个常见的例子是同一个基本字母(“a”vs“ï”)的不同重音形式被认为是第二个差异。
        另请参见:
        setStrength(int)getStrength()Constant Field Values
      • TERTIARY

        public static final int TERTIARY
        整理器强度值。 设定时,在比较期间,只有TERTIARY及以上差异被认为是重要的。 对语言特征的优势分配取决于区域设置。 一个常见的例子是病例差异(“a”vs“A”)被认为是TERTIARY差异。
        另请参见:
        setStrength(int)getStrength()Constant Field Values
      • IDENTICAL

        public static final int IDENTICAL
        整理器强度值。 设定时,所有差异在比较期间都被认为是显着的。 对语言特征的优势分配取决于区域设置。 一个常见的例子是控制字符(“\ u0001”vs“\ u0002”)在PRIMARY,SECONDARY和TERTIARY级别被认为是相等的,但在IDENTICAL级别不同。 此外,如果分解设置为NO_DECOMPOSITION,则在“ENC”(A-grave)和“A \ u0300”(A,combine-grave)之间的预先组合的重音符之间的区别将在IDENTICAL级别被认为是重要的。
        另请参见:
        Constant Field Values
      • NO_DECOMPOSITION

        public static final int NO_DECOMPOSITION
        分解模式值。 设置NO_DECOMPOSITION时,重音字符不会被分解以进行归类。 这是默认设置,并提供最快的排序规则,但只会为不使用重音的语言产生正确的结果。
        另请参见:
        getDecomposition()setDecomposition(int)Constant Field Values
      • FULL_DECOMPOSITION

        public static final int FULL_DECOMPOSITION
        分解模式值。 使用FULL_DECOMPOSITION设置,Unicode规范变体和Unicode兼容性变体将被分解以进行归类。 这不仅引起重音字符的整理,而且还会使具有特殊格式的字符与其正常形式进行整理。 例如,半宽和全角ASCII和片假名字符然后整理在一起。 FULL_DECOMPOSITION是最完整的,因此是最慢的分解模式。

        FULL_DECOMPOSITION对应于规范化形式KD,如Unicode Technical Report #15所述

        另请参见:
        getDecomposition()setDecomposition(int)Constant Field Values
    • 构造方法详细信息

      • Collator

        protected Collator​()
        默认构造函数。 这个构造函数是受保护的,所以子类可以访问它。 用户通常通过调用出厂方法getInstance来创建一个Collator子类。
        另请参见:
        getInstance()
    • 方法详细信息

      • getInstance

        public static Collator getInstance​()
        获取当前默认语言环境的Collator。 默认语言环境由java.util.Locale.getDefault确定。
        结果
        默认语言环境的Collator(例如en_US)
        另请参见:
        Locale.getDefault()
      • getInstance

        public static Collator getInstance​(Locale desiredLocale)
        获取所需语言环境的Collator。
        参数
        desiredLocale - 所需的语言环境。
        结果
        对于所需语言环境的Collator。
        另请参见:
        LocaleResourceBundle
      • compare

        public abstract int compare​(String source,
                                    String target)
        根据此Collator的排序规则将源字符串与目标字符串进行比较。 根据源字符串是否小于等于或大于目标字符串,返回小于等于或大于零的整数。 有关使用示例,请参阅Collator类描述。

        对于一次比较,该方法具有最佳性能。 如果给定的String参与多个比较,CollationKey.compareTo具有最佳性能。 有关使用CollationKeys的示例,请参阅Collator类描述。

        参数
        source - 源字符串。
        target - 目标字符串。
        结果
        返回一个整数值。 如果源小于目标值,则值小于零,如果源和目标相等,则值为零,如果源大于目标值,则值大于零。
        另请参见:
        CollationKeygetCollationKey(java.lang.String)
      • compare

        public int compare​(Object o1,
                           Object o2)
        比较其两个参数的顺序。 返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数。

        此实现只返回compare((String)o1, (String)o2)

        Specified by:
        compare在接口 Comparator<Object>
        参数
        o1 - 要比较的第一个对象。
        o2 - 要比较的第二个对象。
        结果
        第一个参数的负整数,零或正整数小于等于或大于第二个参数。
        异常
        ClassCastException - 参数不能转换为字符串。
        从以下版本开始:
        1.2
        另请参见:
        Comparator
      • getCollationKey

        public abstract CollationKey getCollationKey​(String source)
        将String转换成可以与其他CollationKeys进行比较的一系列位。 当Strings涉及多个比较时,CollationKeys提供比Collator.compare更好的性能。 有关使用CollationKeys的示例,请参阅Collator类描述。
        参数
        source - 要转换为归类密钥的字符串。
        结果
        基于此Collator的排序规则的给定String的CollationKey。 如果源String为null,则返回一个空CollationKey。
        另请参见:
        CollationKeycompare(java.lang.String, java.lang.String)
      • equals

        public boolean equals​(String source,
                              String target)
        基于此Collator的排序规则比较两个字符串的相等性的便利方法。
        参数
        source - 要比较的源字符串。
        target - 要比较的目标字符串。
        结果
        如果字符串根据排序规则规则相等,则为true。 假,否则。
        另请参见:
        compare(java.lang.String, java.lang.String)
      • getStrength

        public int getStrength​()
        返回此Collator的强度属性。 强度属性确定在比较期间被认为是显着的最小差异水平。 有关使用示例,请参阅Collator类描述。
        结果
        此Collator目前的实力财产。
        另请参见:
        setStrength(int)PRIMARYSECONDARYTERTIARYIDENTICAL
      • setStrength

        public void setStrength​(int newStrength)
        设置此Collator的强度属性。 强度属性确定在比较期间被认为是显着的最小差异水平。 有关使用示例,请参阅Collator类描述。
        参数
        newStrength - 新的实力值。
        异常
        IllegalArgumentException - 如果新的实力值不是PRIMARY,SECONDARY,TERTIARY或IDENTICAL之一。
        另请参见:
        getStrength()PRIMARYSECONDARYTERTIARYIDENTICAL
      • getDecomposition

        public int getDecomposition​()
        获取此Collator的分解模式。 分解模式决定如何处理Unicode组合字符。 调整分解模式允许用户在更快更完整的排序规则行为之间进行选择。

        分解模式的三个值为:

        • NO_DECOMPOSITION,
        • CANONICAL_DECOMPOSITION
        • FULL_DECOMPOSITION。
        有关这些三个常数的说明,请参阅文档。
        结果
        分解模式
        另请参见:
        setDecomposition(int)NO_DECOMPOSITIONCANONICAL_DECOMPOSITIONFULL_DECOMPOSITION
      • getAvailableLocales

        public static Locale[] getAvailableLocales​()
        返回所有语言环境的数组, getInstance方法可以返回本地化实例。 返回的数组表示由Java运行时支持的语言环境和已安装的CollatorProvider实现的联合。 它必须至少包含一个等于Locale.US的Locale实例。
        结果
        一组本地化的本地化的 Collator实例可用。
      • clone

        public Object clone​()
        覆盖可克隆
        重写:
        cloneObject
        结果
        这个实例的一个克隆。
        另请参见:
        Cloneable
      • equals

        public boolean equals​(Object that)
        比较两个Collator的平等。
        Specified by:
        equals在接口 Comparator<Object>
        重写:
        equals中的 Object
        参数
        that - 与此进行比较的Collator。
        结果
        如果此Collator与Collator相同,则为true; 否则为假。
        另请参见:
        Object.hashCode()HashMap