- 所有已实现的接口:
-
Cloneable,Comparator<Object>
- 直接已知子类:
-
RuleBasedCollator
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");
}
您可以设置Collator的strength属性来确定在比较中被视为显著差异的级别。提供了四种强度: 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是由给定String的Collator对象创建的。
- API 注意:
-
不同
Collator的CollationKey不能进行比较。请参阅CollationKey类的类描述以查看使用CollationKey的示例。 - 自 JDK 版本:
- 1.1
- 另请参见:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int分解模式值。static final int分解模式值。static final intCollator强度值。static final int分解模式值。static final intCollator强度值。static final intCollator强度值。static final intCollator强度值。 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionclone()覆盖了Cloneableint比较其两个参数的顺序。abstract int根据此Collator的排序规则,比较源字符串和目标字符串。boolean比较两个Collators的相等性。boolean基于此Collator的排序规则,比较两个字符串的相等性的便利方法。static Locale[]返回此类的所有实例的getInstance方法可以返回本地化实例的所有区域设置的数组。abstract CollationKeygetCollationKey(String source) 将字符串转换为一系列可以按位与其他CollationKeys进行比较的位。int获取此Collator的分解模式。static Collator获取当前默认区域设置的Collator。static CollatorgetInstance(Locale desiredLocale) 获取所需区域设置的Collator。int返回此Collator的强度属性。abstract inthashCode()为此Collator生成哈希码。voidsetDecomposition(int decompositionMode) 设置此Collator的分解模式。voidsetStrength(int newStrength) 设置此Collator的强度属性。Methods declared in class java.lang.Object
finalize, getClass, notify, notifyAll, toString, wait, wait, waitMethods declared in interface java.util.Comparator
reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Field Details
-
PRIMARY
public static final int PRIMARYCollator强度值。设置后,仅PRIMARY差异在比较中被视为显著。强度与语言特性的分配是与区域设置相关的。一个常见的例子是将不同的基本字母("a" vs "b")视为PRIMARY差异。- 另请参见:
-
SECONDARY
public static final int SECONDARYCollator强度值。设置后,仅SECONDARY及以上差异在比较中被视为显著。强度与语言特性的分配是与区域设置相关的。一个常见的例子是将同一基本字母的不同重音形式("a" vs "ä")视为SECONDARY差异。- 另请参见:
-
TERTIARY
public static final int TERTIARYCollator强度值。设置后,仅TERTIARY及以上差异在比较中被视为显著。强度与语言特性的分配是与区域设置相关的。一个常见的例子是将大小写差异("a" vs "A")视为TERTIARY差异。- 另请参见:
-
IDENTICAL
public static final int IDENTICALCollator强度值。设置后,所有差异在比较中被视为显著。强度与语言特性的分配是与区域设置相关的。一个常见的例子是控制字符("\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
获取当前默认区域设置的Collator。默认区域设置由Locale.getDefault()确定。- 返回:
- 默认区域设置的Collator。(例如,en_US)
- 参见:
-
getInstance
获取所需区域设置的Collator。如果所需区域设置具有"ks"和/或"kk" Unicode排序设置,此方法将在创建的实例上调用setStrength(int)和/或setDecomposition(int),如果指定的Unicode排序设置基于以下映射被识别:
星号(*)表示默认值。如果指定的设置值未被识别,则不会覆盖强度和/或分解,就好像所需区域设置中没有BCP 47排序选项一样。强度(ks)的BCP 47值 强度的Collator常量 level1 PRIMARY level2 SECONDARY level3 TERTIARY* identic IDENTICAL 规范化(kk)的BCP 47值 分解的Collator常量 true CANONICAL_DECOMPOSITION false NO_DECOMPOSITION* - API注释:
-
Collator类的实现可能基于
desiredLocale中的"co" Unicode排序标识符生成不同的实例。例如:可能返回具有瑞典传统排序的Collator实例,其中'v'和'w'具有相同的排序顺序,而不带"co"标识符的瑞典区域设置的Collator实例区分'v'和'w'。Collator.getInstance(Locale.forLanguageTag("sv-u-co-trad")); - 参数:
-
desiredLocale- 所需的区域设置。 - 返回:
- 所需区域设置的Collator。
- 外部规范
- 参见:
-
compare
根据此Collator的排序规则将源字符串与目标字符串进行比较。根据源字符串是否小于、等于或大于目标字符串,返回小于零、等于零或大于零的整数。请参阅Collator类描述以了解使用示例。对于一次性比较,此方法具有最佳性能。如果给定的字符串将参与多次比较,则CollationKey.compareTo具有最佳性能。请参阅Collator类描述以了解使用CollationKeys的示例。
- 参数:
-
source- 源字符串。 -
target- 目标字符串。 - 返回:
- 返回一个整数值。如果源小于目标,则值小于零,如果源和目标相等,则值为零,如果源大于目标,则值大于零。
- 参见:
-
compare
按顺序比较其两个参数。根据第一个参数是否小于、等于或大于第二个参数,返回负整数、零或正整数。此实现仅返回
compare((String)o1, (String)o2)。- 指定者:
-
compare在接口Comparator<Object> - 参数:
-
o1- 要比较的第一个对象。 -
o2- 要比较的第二个对象。 - 返回:
- 负整数、零或正整数,表示第一个参数小于、等于或大于第二个参数。
- 抛出:
-
ClassCastException- 参数无法转换为字符串。 - 自:
- 1.2
- 参见:
-
getCollationKey
将字符串转换为一系列可以按位比较的位。当涉及多次比较字符串时,CollationKeys提供比Collator.compare更好的性能。请参阅Collator类描述以了解使用CollationKeys的示例。- 参数:
-
source- 要转换为排序键的字符串。 - 返回:
- 基于此Collator的排序规则的给定字符串的CollationKey。如果源字符串为null,则返回null CollationKey。
- 参见:
-
equals
根据此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
返回所有支持此类的getInstance方法返回本地化实例的所有区域设置的数组。返回的数组表示Java运行时和已安装的CollatorProvider实现支持的区域设置的并集。返回的数组至少必须包含一个等于Locale.ROOT和一个等于Locale.US的Locale实例。- 返回:
-
可用于本地化
Collator实例的区域设置数组。
-
clone
覆盖了Cloneable -
equals
比较两个Collators的相等性。- 指定者:
-
equals在接口Comparator<Object> - 覆盖:
-
equals在类Object - 参数:
-
that- 要与此进行比较的Collator。 - 返回:
- 如果此Collator与该Collator相同,则返回true;否则返回false。
- 参见:
-
hashCode
public abstract int hashCode()为此Collator生成哈希码。
-