Module java.base
Package java.text

Class Collator

java.lang.Object
java.text.Collator
所有已实现的接口:
Cloneable, Comparator<Object>
直接已知子类:
RuleBasedCollator

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

Collator是一个抽象基类。子类实现特定的排序策略。一个子类RuleBasedCollator目前已经提供在Java平台上,并适用于广泛的语言。其他子类可以被创建来处理更专业化的需求。

像其他区域敏感的类一样,您可以使用静态工厂方法getInstance来获取给定区域设置的适当Collator对象。只有在需要了解特定排序策略的细节或需要修改该策略时,您才需要查看Collator的子类。

以下示例显示了如何使用默认区域设置的Collator比较两个字符串。

// 在默认区域设置中比较两个字符串
Collator myCollator = Collator.getInstance();
if (myCollator.compare("abc", "ABC") < 0) {
    System.out.println("abc小于ABC");
} else {
    System.out.println("abc大于或等于ABC");
}

您可以设置Collatorstrength属性来确定在比较中被视为显著差异的级别。提供了四种强度: PRIMARY, SECONDARY, TERTIARY, 和 IDENTICAL。强度与语言特性的确切分配是与区域设置相关的。例如,在捷克语中,"e" 和 "f" 被视为主要差异,而 "e" 和 "ě" 被视为次要差异,"e" 和 "E" 被视为三级差异,"e" 和 "e" 被视为相同。以下示例显示了如何忽略大小写和重音符号对美国英语进行比较。

// 获取美国英语的Collator并将其强度设置为PRIMARY
Collator usCollator = Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);
if (usCollator.compare("abc", "ABC") == 0) {
    System.out.println("字符串相等");
}

对于仅需一次精确比较String的情况,compare方法提供了最佳性能。然而,在对一组String进行排序时,通常需要多次比较每个String。在这种情况下,CollationKey提供了更好的性能。CollationKey类将String转换为一系列可以按位与其他CollationKey进行比较的位。CollationKey是由给定StringCollator对象创建的。

API 注意:
不同CollatorCollationKey不能进行比较。请参阅CollationKey类的类描述以查看使用CollationKey的示例。
自 JDK 版本:
1.1
另请参见:
  • Field Details

    • PRIMARY

      public static final int PRIMARY
      Collator强度值。设置后,仅PRIMARY差异在比较中被视为显著。强度与语言特性的分配是与区域设置相关的。一个常见的例子是将不同的基本字母("a" vs "b")视为PRIMARY差异。
      另请参见:
    • SECONDARY

      public static final int SECONDARY
      Collator强度值。设置后,仅SECONDARY及以上差异在比较中被视为显著。强度与语言特性的分配是与区域设置相关的。一个常见的例子是将同一基本字母的不同重音形式("a" vs "ä")视为SECONDARY差异。
      另请参见:
    • TERTIARY

      public static final int TERTIARY
      Collator强度值。设置后,仅TERTIARY及以上差异在比较中被视为显著。强度与语言特性的分配是与区域设置相关的。一个常见的例子是将大小写差异("a" vs "A")视为TERTIARY差异。
      另请参见:
    • IDENTICAL

      public static final int IDENTICAL
      Collator强度值。设置后,所有差异在比较中被视为显著。强度与语言特性的分配是与区域设置相关的。一个常见的例子是控制字符("\u0001" vs "\u0002")在PRIMARY、SECONDARY和TERTIARY级别被视为相同,但在IDENTICAL级别被视为不同。此外,如果分解设置为NO_DECOMPOSITION,则预组合重音符号之间的差异(如"\u00C0"(A-grave)和组合重音符号之间的差异(如"A\u0300"(A,组合-grave))将在IDENTICAL级别被视为显著。
      另请参见:
    • NO_DECOMPOSITION

      public static final int NO_DECOMPOSITION
      分解模式值。设置为NO_DECOMPOSITION时,重音字符不会被分解进行排序。此设置提供最快的排序,但仅适用于不使用重音符号的语言的正确结果。
      另请参见:
    • CANONICAL_DECOMPOSITION

      public static final int CANONICAL_DECOMPOSITION
      分解模式值。设置为CANONICAL_DECOMPOSITION时,根据Unicode标准,符合规范的字符将被分解进行排序。这应该用于获取重音字符的正确排序。

      CANONICAL_DECOMPOSITION对应于Unicode标准附录#15:Unicode规范化形式中描述的规范化形式D。

      外部规范
      另请参见:
    • FULL_DECOMPOSITION

      public static final int FULL_DECOMPOSITION
      分解模式值。设置为FULL_DECOMPOSITION时,Unicode规范化变体和Unicode兼容变体都将被分解进行排序。这不仅导致重音字符被排序,还导致具有特殊格式的字符与其标准形式一起排序。例如,半角和全角ASCII和片假名字符将被一起排序。FULL_DECOMPOSITION是最完整的,因此是最慢的分解模式。

      FULL_DECOMPOSITION对应于Unicode标准附录#15:Unicode规范化形式中描述的规范化形式KD。

      外部规范
      参见:
  • Constructor Details

    • Collator

      protected Collator()
      默认构造函数。此构造函数受保护,以便子类可以访问它。通常,用户通过调用工厂方法getInstance来创建Collator子类。
      参见:
  • Method Details

    • getInstance

      public static Collator getInstance()
      获取当前默认区域设置的Collator。默认区域设置由Locale.getDefault()确定。
      返回:
      默认区域设置的Collator。(例如,en_US)
      参见:
    • getInstance

      public static Collator getInstance(Locale desiredLocale)
      获取所需区域设置的Collator。如果所需区域设置具有"ks"和/或"kk" Unicode排序设置,此方法将在创建的实例上调用setStrength(int)和/或setDecomposition(int),如果指定的Unicode排序设置基于以下映射被识别:
      强度/分解映射
      强度(ks)的BCP 47值 强度的Collator常量
      level1 PRIMARY
      level2 SECONDARY
      level3 TERTIARY*
      identic IDENTICAL
      规范化(kk)的BCP 47值 分解的Collator常量
      true CANONICAL_DECOMPOSITION
      false NO_DECOMPOSITION*
      星号(*)表示默认值。如果指定的设置值未被识别,则不会覆盖强度和/或分解,就好像所需区域设置中没有BCP 47排序选项一样。
      API注释:
      Collator类的实现可能基于desiredLocale中的"co" Unicode排序标识符生成不同的实例。例如:
      Collator.getInstance(Locale.forLanguageTag("sv-u-co-trad"));
      
      可能返回具有瑞典传统排序的Collator实例,其中'v'和'w'具有相同的排序顺序,而不带"co"标识符的瑞典区域设置的Collator实例区分'v'和'w'。
      参数:
      desiredLocale - 所需的区域设置。
      返回:
      所需区域设置的Collator。
      外部规范
      参见:
    • compare

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

      对于一次性比较,此方法具有最佳性能。如果给定的字符串将参与多次比较,则CollationKey.compareTo具有最佳性能。请参阅Collator类描述以了解使用CollationKeys的示例。

      参数:
      source - 源字符串。
      target - 目标字符串。
      返回:
      返回一个整数值。如果源小于目标,则值小于零,如果源和目标相等,则值为零,如果源大于目标,则值大于零。
      参见:
    • compare

      public int compare(Object o1, Object o2)
      按顺序比较其两个参数。根据第一个参数是否小于、等于或大于第二个参数,返回负整数、零或正整数。

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

      指定者:
      compare 在接口 Comparator<Object>
      参数:
      o1 - 要比较的第一个对象。
      o2 - 要比较的第二个对象。
      返回:
      负整数、零或正整数,表示第一个参数小于、等于或大于第二个参数。
      抛出:
      ClassCastException - 参数无法转换为字符串。
      自:
      1.2
      参见:
    • getCollationKey

      public abstract CollationKey getCollationKey(String source)
      将字符串转换为一系列可以按位比较的位。当涉及多次比较字符串时,CollationKeys提供比Collator.compare更好的性能。请参阅Collator类描述以了解使用CollationKeys的示例。
      参数:
      source - 要转换为排序键的字符串。
      返回:
      基于此Collator的排序规则的给定字符串的CollationKey。如果源字符串为null,则返回null CollationKey。
      参见:
    • equals

      public boolean equals(String source, String target)
      根据此Collator的排序规则,基于两个字符串的相等性进行比较的便利方法。
      参数:
      source - 要与之比较的源字符串。
      target - 要与之比较的目标字符串。
      返回:
      如果根据排序规则字符串相等,则返回true。否则返回false。
      参见:
    • getStrength

      public int getStrength()
      返回此Collator的强度属性。强度属性确定在比较期间被视为显着差异的最低级别。请参阅Collator类描述以了解使用示例。
      返回:
      此Collator的当前强度属性。
      参见:
    • setStrength

      public void setStrength(int newStrength)
      设置此Collator的强度属性。强度属性确定在比较期间被视为显着差异的最低级别。请参阅Collator类描述以了解使用示例。
      参数:
      newStrength - 新的强度值。
      抛出:
      IllegalArgumentException - 如果新的强度值不是PRIMARY、SECONDARY、TERTIARY或IDENTICAL之一。
      参见:
    • getDecomposition

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

      分解模式的三个值为:

      • NO_DECOMPOSITION,
      • CANONICAL_DECOMPOSITION
      • FULL_DECOMPOSITION。
      有关这三个常量的含义,请参阅这三个常量的文档。
      返回:
      分解模式
      参见:
    • setDecomposition

      public void setDecomposition(int decompositionMode)
      设置此Collator的分解模式。有关分解模式的描述,请参阅getDecomposition。
      参数:
      decompositionMode - 新的分解模式。
      抛出:
      IllegalArgumentException - 如果给定的值不是有效的分解模式。
      参见:
    • getAvailableLocales

      public static Locale[] getAvailableLocales()
      返回所有支持此类的getInstance方法返回本地化实例的所有区域设置的数组。返回的数组表示Java运行时和已安装的CollatorProvider实现支持的区域设置的并集。返回的数组至少必须包含一个等于Locale.ROOT和一个等于Locale.USLocale实例。
      返回:
      可用于本地化Collator实例的区域设置数组。
    • clone

      public Object clone()
      覆盖了Cloneable
      覆盖:
      clone 在类 Object
      返回:
      此实例的克隆。
      参见:
    • equals

      public boolean equals(Object that)
      比较两个Collators的相等性。
      指定者:
      equals 在接口 Comparator<Object>
      覆盖:
      equals 在类 Object
      参数:
      that - 要与此进行比较的Collator。
      返回:
      如果此Collator与该Collator相同,则返回true;否则返回false。
      参见:
    • hashCode

      public abstract int hashCode()
      为此Collator生成哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      参见: