Most visited

Recently visited

Added in API level 24

CollationElementIterator

public final class CollationElementIterator
extends Object

java.lang.Object
   ↳ android.icu.text.CollationElementIterator


CollationElementIterator是由RuleBasedCollator创建的遍历字符串的迭代器。 每次迭代的返回结果是一个32位整理元素(CE),用于定义源字符串中下一个字符或字符序列的排序优先级。

为了说明,请考虑斯洛伐克和传统西班牙语整理中的以下内容:

 "ca" -> the first collation element is CE('c') and the second
         collation element is CE('a').
 "cha" -> the first collation element is CE('ch') and the second
          collation element is CE('a').
 
And in German phonebook collation,
 Since the character 'æ' is a composed character of 'a' and 'e', the
 iterator returns two collation elements for the single character 'æ'

 "æb" -> the first collation element is collation_element('a'), the
              second collation element is collation_element('e'), and the
              third collation element is collation_element('b').
 

对于排序规则比较,整理元素结果不能简单地通过使用基本算术运算符进行比较,例如<,==或>,必须进行进一步处理。 详细信息可在ICU User Guide中找到。 使用CollationElementIterator进行排序规则比较的示例是类StringSearch

为了构造一个CollationElementIterator对象,用户在一个RuleBasedCollator上调用方法getCollationElementIterator(),该方法定义了所需的排序顺序。

例:

  String testString = "This is a test";
  RuleBasedCollator rbc = new RuleBasedCollator("&a<b");
  CollationElementIterator iterator = rbc.getCollationElementIterator(testString);
  int primaryOrder = iterator.IGNORABLE;
  while (primaryOrder != iterator.NULLORDER) {
      int order = iterator.next();
      if (order != iterator.IGNORABLE &&
          order != iterator.NULLORDER) {
          // order is valid, not ignorable and we have not passed the end
          // of the iteration, we do something
          primaryOrder = CollationElementIterator.primaryOrder(order);
          System.out.println("Next primary order 0x" +
                             Integer.toHexString(primaryOrder));
      }
  }
 

next()方法根据整理器的比较级别返回下一个字符的整理顺序。 previous()方法根据整理器的比较级别返回前一个字符的整理顺序。 整理元素迭代器只能在调用reset(),setOffset()或setText()之间的一个方向上移动。 也就是说,next()和previous()不能互相使用。 每当previous()在next()之后被调用,反之亦然,必须首先调用reset(),setOffset()或setText()来重置状态,将当前位置移动到字符串的结尾或开始位置(reset()或setText())或指定的位置(setOffset())。 因此,在next()或previous()的下一次调用中,将返回指定位置的第一个或最后一个整理顺序或整理顺序。 如果没有这些调用之一改变方向,结果是不确定的。

这个类不是可分类的。

也可以看看:

Summary

Constants

int IGNORABLE

迭代器在next()和previous()方法中将忽略校验元素结果时返回此常量。

int NULLORDER

迭代器在next()和previous()方法中返回该常量,当到达源字符串的末尾或起始位置时,将返回无效的整理元素。

Public methods

boolean equals(Object that)

测试该参数对象是否等于此CollationElementIterator。

int getMaxExpansion(int ce)

返回以指定的排序规则元素结尾的任何扩展序列的最大长度。

int getOffset()

返回与下一个整理元素对应的源字符串中的字符偏移量。

int next()

获取源字符串中的下一个整理元素。

int previous()

获取源字符串中以前的整理元素。

static final int primaryOrder(int ce)

返回指定排序规则元素的主要顺序,即

void reset()

将光标重置到字符串的开头。

static final int secondaryOrder(int ce)

返回指定排序规则元素的次级顺序,即

void setOffset(int newOffset)

将迭代器设置为指向与指定偏移量处的字符对应的归类元素。

void setText(String source)

为迭代设置新的源字符串,并将偏移重置为文本的开头。

void setText(CharacterIterator source)

为迭代设置一个新的源字符串迭代器,并将偏移量重置为文本的开头。

void setText(UCharacterIterator source)

为迭代设置一个新的源字符串迭代器,并将偏移量重置为文本的开头。

static final int tertiaryOrder(int ce)

返回指定排序规则元素的第三阶次,即

Inherited methods

From class java.lang.Object

Constants

IGNORABLE

Added in API level 24
int IGNORABLE

迭代器在next()和previous()方法中将忽略校验元素结果时返回此常量。

请参阅类文档以获取使用示例。

也可以看看:

常量值:0(0x00000000)

NULLORDER

Added in API level 24
int NULLORDER

迭代器在next()和previous()方法中返回该常量,当到达源字符串的末尾或起始位置时,将返回无效的整理元素。

请参阅类文档以获取使用示例。

也可以看看:

常量值:-1(0xffffffff)

Public methods

equals

Added in API level 24
boolean equals (Object that)

测试该参数对象是否等于此CollationElementIterator。 如果对象使用相同的RuleBasedCollator,相同的源文本并且在迭代中具有相同的当前位置,那么迭代器是相等的。

Parameters
that Object: object to test if it is equals to this CollationElementIterator
Returns
boolean true if this object is the same as the obj argument; false otherwise.

getMaxExpansion

Added in API level 24
int getMaxExpansion (int ce)

返回以指定的排序规则元素结尾的任何扩展序列的最大长度。 如果该排序规则元素没有扩展为最后一个元素,则返回1。

Parameters
ce int: a collation element returned by previous() or next().
Returns
int the maximum length of any expansion sequence ending with the specified collation element.

getOffset

Added in API level 24
int getOffset ()

返回与下一个整理元素对应的源字符串中的字符偏移量。 即,getOffset()返回与下一个调用next()或previous()时返回的排序规则对应的源字符串中的位置。 该值可以是以下任何值:

  • The index of the first character corresponding to the next collation element. (This means that if setOffset(offset) sets the index in the middle of a contraction, getOffset() returns the index of the first character in the contraction, which may not be equal to the original offset that was set. Hence calling getOffset() immediately after setOffset(offset) does not guarantee that the original offset set will be returned.)
  • If normalization is on, the index of the immediate subsequent character, or composite character with the first character, having a combining class of 0.
  • The length of the source string, if iteration has reached the end.

Returns
int The character offset in the source string corresponding to the collation element that will be returned by the next call to next() or previous().

next

Added in API level 24
int next ()

获取源字符串中的下一个整理元素。

此迭代器迭代从字符串构建的一系列校对元素。 因为不一定有从字符到归类元素的一对一映射,所以这不意味着与“返回字符串中下一个字符的归类元素[或排序优先级]”相同。

该函数返回迭代器当前指向的排序规则元素,然后更新内部指针以指向下一个元素。

Returns
int the next collation element or NULLORDER if the end of the iteration has been reached.

previous

Added in API level 24
int previous ()

获取源字符串中以前的整理元素。

此迭代器迭代从字符串构建的一系列校对元素。 因为不一定是从字符到归类元素的一对一映射,所以这不意味着与“返回字符串中前一个字符的归类元素[或排序优先级]”相同。

该函数将迭代器的内部指针更新为指向它当前指向的元素之前的排序规则元素,然后返回该元素,而next()返回当前元素,然后更新指针。

Returns
int the previous collation element, or NULLORDER when the start of the iteration has been reached.

primaryOrder

Added in API level 24
int primaryOrder (int ce)

返回指定排序规则元素的主要顺序,即前16位。 该值是无符号的。

Parameters
ce int: the collation element
Returns
int the element's 16 bits primary order.

reset

Added in API level 24
void reset ()

将光标重置到字符串的开头。 下一次调用next()或previous()将分别返回字符串中的第一个和最后一个校验元素。

如果此迭代器使用的RuleBasedCollator的属性已更改,则调用reset()将重新初始化迭代器以使用新属性。

secondaryOrder

Added in API level 24
int secondaryOrder (int ce)

返回指定排序规则元素的次级顺序,即第16至23位(含)。 该值是无符号的。

Parameters
ce int: the collation element
Returns
int the element's 8 bits secondary order

setOffset

Added in API level 24
void setOffset (int newOffset)

将迭代器设置为指向与指定偏移量处的字符对应的归类元素。 下一次调用next()所返回的值将是与offset处字符对应的排序规则元素。

如果偏移位于收缩字符序列的中间,则将迭代器调整为收缩序列的开始。 这意味着getOffset()不保证返回此方法设置的相同值。

如果分解模式处于打开状态,并且偏移位于源文本的可分解范围的中间,则迭代器可能不会为下一个向前或向后迭代返回正确的结果。 用户必须确保偏移量不在可分解范围的中间。

Parameters
newOffset int: the character offset into the original source string to set. Note that this is not an offset into the corresponding sequence of collation elements.

setText

Added in API level 24
void setText (String source)

为迭代设置新的源字符串,并将偏移重置为文本的开头。

Parameters
source String: the new source string for iteration.

setText

Added in API level 24
void setText (CharacterIterator source)

为迭代设置一个新的源字符串迭代器,并将偏移量重置为文本的开头。

Parameters
source CharacterIterator: the new source string iterator for iteration.

setText

Added in API level 24
void setText (UCharacterIterator source)

为迭代设置一个新的源字符串迭代器,并将偏移量重置为文本的开头。

源迭代器的完整性将被保留,因为将创建一个新副本供使用。

Parameters
source UCharacterIterator: the new source string iterator for iteration.

tertiaryOrder

Added in API level 24
int tertiaryOrder (int ce)

返回指定排序规则元素的第三阶次,即最后8位。 该值是无符号的。

Parameters
ce int: the collation element
Returns
int the element's 8 bits tertiary order

Hooray!