public final class CollationKey
extends Object
implements Comparable<CollationKey>
java.lang.Object | |
↳ | android.icu.text.CollationKey |
甲CollationKey
表示String
下一个特定的规则Collator
对象。 比较两个CollationKey
s将返回它们所代表的String
的相对顺序。
由于Collator
的规则集可能有所不同,因此两个不同Collator
下的相同字符串的排序顺序可能有所不同。 因此比较CollationKey
来自不同生成S- Collator
S能够得到不正确的结果。
方法CollationKey.compareTo(CollationKey)
和方法Collator.compare(String, String)
比较两个字符串并返回它们的相对顺序。 这两种方法的性能特征可能不同。 请注意,整理键通常比简单比较效率低。 有关更多详细信息,请参阅ICU用户指南。
在构建CollationKey
,整个源字符串将被检查并处理成一系列以null结尾的位,存储在CollationKey
。 当CollationKey.compareTo(CollationKey)
执行时,它会对位序列进行按位比较。 这在创建CollationKey
时会导致启动成本,但一旦创建密钥,二进制比较就会很快。 如果要重复比较相同的字符串,建议使用此方法。
另一方面, Collator.compare(String, String)
实现只能检查和处理字符串,直到第一个字符顺序不同。 如果字符串仅比较一次,则建议使用此方法。
关于比特序列组成的更多信息可以在 user guide中找到。
以下示例显示如何使用 CollationKey
s对 String
的列表进行排序。
// Create an array of CollationKeys for the Strings to be sorted. Collator myCollator = Collator.getInstance(); CollationKey[] keys = new CollationKey[3]; keys[0] = myCollator.getCollationKey("Tom"); keys[1] = myCollator.getCollationKey("Dick"); keys[2] = myCollator.getCollationKey("Harry"); sort( keys );
//...
// Inside body of sort routine, compare keys this way if( keys[i].compareTo( keys[j] ) > 0 ) // swap keys[i] and keys[j]
//...
// Finally, when we've returned from sort. System.out.println( keys[0].getSourceString() ); System.out.println( keys[1].getSourceString() ); System.out.println( keys[2].getSourceString() );
这个类不是可分类的
也可以看看:
Nested classes |
|
---|---|
class |
CollationKey.BoundMode API CollationKey.getBound()用于根据请求的绑定模式获取CollationKey的选项。 |
Public constructors |
|
---|---|
CollationKey(String source, byte[] key) CollationKey构造函数。 |
Public methods |
|
---|---|
int |
compareTo(CollationKey target) 将此CollationKey与另一个CollationKey进行比较。 |
boolean |
equals(CollationKey target) 比较此CollationKey和参数目标CollationKey的相等性。 |
boolean |
equals(Object target) 比较此CollationKey和指定的对象是否相等。 |
CollationKey |
getBound(int boundType, int noOfLevels) 为给定的整理键和强度级别生成一个排序顺序。 |
String |
getSourceString() 返回此CollationKey表示的源字符串。 |
int |
hashCode() 返回此CollationKey的哈希码。 |
CollationKey |
merge(CollationKey source) 将此CollationKey与另一个合并。 |
byte[] |
toByteArray() 复制并返回此CollationKey的值,作为由null结尾的大端字节序列。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.lang.Comparable
|
CollationKey (String source, byte[] key)
CollationKey构造函数。 与JDK版本不同,此构造函数被授予公共访问权限,以允许访问扩展Collator类的用户。 见getCollationKey(String)
。
Parameters | |
---|---|
source |
String : string this CollationKey is to represent |
key |
byte : array of bytes that represent the collation order of argument source terminated by a null |
也可以看看:
int compareTo (CollationKey target)
将此CollationKey与另一个CollationKey进行比较。 应用创建此密钥的Collator的归类规则。
注意:不同校对者创建的校对键之间的比较可能会返回不正确的结果。 请参阅班级文件。
Parameters | |
---|---|
target |
CollationKey : target CollationKey |
Returns | |
---|---|
int |
an integer value. If the value is less than zero this CollationKey is less than than target, if the value is zero they are equal, and if the value is greater than zero this CollationKey is greater than target. |
Throws | |
---|---|
NullPointerException |
is thrown if argument is null. |
也可以看看:
boolean equals (CollationKey target)
比较此CollationKey和参数目标CollationKey的相等性。 应用创建这些对象的Collator对象的排序规则。
请参阅compareTo(CollationKey)中有关错误结果警告的说明
Parameters | |
---|---|
target |
CollationKey : the CollationKey to compare to. |
Returns | |
---|---|
boolean |
true if two objects are equal, false otherwise. |
Throws | |
---|---|
NullPointerException |
is thrown when the argument is null. |
boolean equals (Object target)
比较此CollationKey和指定的对象是否相等。 应用创建此密钥的Collator的归类规则。
请参阅compareTo(CollationKey)中的说明,以获取有关可能的错误结果的警告。
Parameters | |
---|---|
target |
Object : the object to compare to. |
Returns | |
---|---|
boolean |
true if the two keys compare as equal, false otherwise. |
Throws | |
---|---|
ClassCastException |
is thrown when the argument is not a CollationKey. NullPointerException is thrown when the argument is null. |
也可以看看:
CollationKey getBound (int boundType, int noOfLevels)
为给定的整理键和强度级别生成一个排序顺序。 此API不会尝试为CollationKey字符串表示找到一个边界,因此将返回null。
结果边界可用于生成一系列在上下边界之间的字符串。 例如,如果边界是针对字符串“smith”的sortkey生成的,则使用主要强度的上下界之间的字符串将包括“Smith”,“SMITH”,“sMiTh”。
有两个上限可以生产。 如果生成BoundMode.UPPER,则匹配的字符串将如上所述。 但是,如果使用BoundMode生成边界,则使用UPPER_LONG,上面的示例也将匹配“Smithsonian”和类似的。
有关使用的更多信息,请参阅测试程序 src/com/ibm/icu/dev/test/collator/CollationAPITest/TestBounds.中的示例
生成的整理键可以使用 compare API进行比较。
Parameters | |
---|---|
boundType |
int : Mode of bound required. It can be BoundMode.LOWER, which produces a lower inclusive bound, BoundMode.UPPER, that produces upper bound that matches strings of the same length or BoundMode.UPPER_LONG that matches strings that have the same starting substring as the source string. |
noOfLevels |
int : Strength levels required in the resulting bound (for most uses, the recommended value is PRIMARY). This strength should be less than the maximum strength of this CollationKey. See users guide for explanation on the strength levels a collation key can have. |
Returns | |
---|---|
CollationKey |
the result bounded CollationKey with a valid sort order but a null String representation. |
Throws | |
---|---|
IllegalArgumentException |
thrown when the strength level requested is higher than or equal to the strength in this CollationKey. In the case of an Exception, information about the maximum strength to use will be returned in the Exception. The user can then call getBound() again with the appropriate strength. |
String getSourceString ()
返回此CollationKey表示的源字符串。
Returns | |
---|---|
String |
source string that this CollationKey represents |
int hashCode ()
返回此CollationKey的哈希码。 散列值是根据密钥本身计算的,而不是从中创建密钥的字符串。 因此,如果x和y是CollationKeys,则x.hashCode(x)== y.hashCode()如果x.equals(y)为true。 这允许在哈希表中进行语言敏感的比较。
Returns | |
---|---|
int |
the hash value. |
CollationKey merge (CollationKey source)
将此CollationKey与另一个合并。 这些级别与其相应的对应级别(初级初级,二级级和次级等)合并。 插入分隔符的同一级别的值之间。
例如,这对于组合第一个和最后一个名字的排序键来对这些对进行排序很有用。 请参阅http://www.unicode.org/reports/tr10/#Merging_Sort_Keys
实现“合并”排序的推荐方法是在它们之间串联U + FFFE。 连接与合并的排序键具有相同的排序顺序,但合并(getSortKey(str1),getSortKey(str2))可能与getSortKey(str1 +'???'+ str2)不同。 使用带有U + FFFE的字符串可能会产生更短的排序键。
有关Sort Key Features的详细信息,请参阅http://userguide.icu-project.org/collation/api#TOC-Sort-Key-Features
通过连续合并另一个与中间结果可以合并多个排序键。
只有CollationKeys的排序关键字被合并。 此API不会尝试合并CollationKeys的字符串表示形式,因此将返回null作为结果的字符串表示形式。
示例(未压缩):
191B1D 01 050505 01 910505 00 1F2123 01 050505 01 910505 00will be merged as
191B1D 02 1F2123 01 050505 02 050505 01 910505 02 910505 00
Parameters | |
---|---|
source |
CollationKey : CollationKey to merge with |
Returns | |
---|---|
CollationKey |
a CollationKey that contains the valid merged sort keys with a null String representation, i.e. new CollationKey(null, merged_sort_keys) |
Throws | |
---|---|
IllegalArgumentException |
thrown if source CollationKey argument is null or of 0 length. |
byte[] toByteArray ()
复制并返回此CollationKey的值,作为由null结尾的大端字节序列。
如果两个CollationKeys可以合法比较,那么可以比较每个的字节数组以获得相同的结果,例如
byte key1[] = collationkey1.toByteArray(); byte key2[] = collationkey2.toByteArray(); int key, targetkey; int i = 0; do { key = key1[i] & 0xFF; targetkey = key2[i] & 0xFF; if (key < targetkey) { System.out.println("String 1 is less than string 2"); return; } if (targetkey < key) { System.out.println("String 1 is more than string 2"); } i ++; } while (key != 0 && targetKey != 0); System.out.println("Strings are equal.");
Returns | |
---|---|
byte[] |
CollationKey value in a sequence of big-endian byte bytes terminated by a null. |