Top Description Fields Constructors Methods
com.ibm.icu.text

public final Class UnicodeSetIterator

extends Object
Class Inheritance
Imports
java.util.Iterator

UnicodeSetIterator iterates over the contents of a UnicodeSet. It iterates over either code points or code point ranges. After all code points or ranges have been returned, it returns the multicharacter strings of the UnicodeSet, if any.

This class is not intended for public subclassing.

To iterate over code points and multicharacter strings, use a loop like this:

for (UnicodeSetIterator it = new UnicodeSetIterator(set); it.next();) {
  processString(it.getString());
}

To iterate over code point ranges, use a loop like this:

for (UnicodeSetIterator it = new UnicodeSetIterator(set); it.nextRange();) {
  if (it.codepoint != UnicodeSetIterator.IS_STRING) {
    processCodepointRange(it.codepoint, it.codepointEnd);
  } else {
    processString(it.getString());
  }
}

To iterate over only the strings, start with new UnicodeSetIterator(set).skipToStrings().

Warning

For speed, UnicodeSet iteration does not check for concurrent modification. Do not alter the UnicodeSet while iterating.

Author
M. Davis
ICU Status
Stable since ICU 2.0.
See Also
UnicodeSet#ranges(), UnicodeSet#strings(), UnicodeSet#iterator()

Field Summary

Modifier and TypeField and Description
public int
codepoint

Current code point, or the special value IS_STRING, if the iterator points to a string.

public int
codepointEnd

When iterating over ranges using nextRange(), codepointEnd contains the inclusive end of the iteration range, if codepoint != IS_STRING.

private int
private int
public static final int
IS_STRING

Value of codepoint if the iterator points to a string.

private int
private int
private UnicodeSet
public String
string

If codepoint == IS_STRING, then string points to the current string.

private Iterator<String>
stringIterator

Invariant: stringIterator is null when there are no (more) strings remaining

Constructor Summary

AccessConstructor and Description
public
UnicodeSetIterator(UnicodeSet
set to iterate over
set
)

Create an iterator over the given set.

public
UnicodeSetIterator()

Create an iterator over nothing.

Method Summary

Modifier and TypeMethod and Description
public String
getString()

Gets the current string from the iterator.

private void
loadRange(int aRange)

public boolean

Returns:

true if there was another element in the set and this object contains the element.
next
()

Returns the next element in the set, either a single code point or a string.

public boolean

Returns:

true if there was another element in the set and this object contains the element.
nextRange
()

Returns the next element in the set, either a code point range or a string.

public void
reset(UnicodeSet
the set to iterate over.
uset
)

Sets this iterator to visit the elements of the given set and resets it to the start of that set.

public void
reset()

Resets this iterator to the start of the set.

public UnicodeSetIterator

Returns:

this
skipToStrings
()

Skips over the remaining code points/ranges, if any.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

codepointback to summary
public int codepoint

Current code point, or the special value IS_STRING, if the iterator points to a string.

ICU Status
Stable since ICU 2.0.
codepointEndback to summary
public int codepointEnd

When iterating over ranges using nextRange(), codepointEnd contains the inclusive end of the iteration range, if codepoint != IS_STRING. If iterating over code points using next(), or if codepoint == IS_STRING, then the value of codepointEnd is undefined.

ICU Status
Stable since ICU 2.0.
endElementback to summary
private int endElement
endRangeback to summary
private int endRange
IS_STRINGback to summary
public static final int IS_STRING

Value of codepoint if the iterator points to a string. If codepoint == IS_STRING, then examine string for the current iteration result.

ICU Status
Stable since ICU 2.0.
nextElementback to summary
private int nextElement
rangeback to summary
private int range
setback to summary
private UnicodeSet set
stringback to summary
public String string

If codepoint == IS_STRING, then string points to the current string. If codepoint != IS_STRING, the value of string is undefined.

ICU Status
Stable since ICU 2.0.
stringIteratorback to summary
private Iterator<String> stringIterator

Invariant: stringIterator is null when there are no (more) strings remaining

Constructor Detail

UnicodeSetIteratorback to summary
public UnicodeSetIterator(UnicodeSet set)

Create an iterator over the given set.

Parameters
set:UnicodeSet

set to iterate over

ICU Status
Stable since ICU 2.0.
UnicodeSetIteratorback to summary
public UnicodeSetIterator()

Create an iterator over nothing. next() and nextRange() return false. This is a convenience constructor allowing the target to be set later.

ICU Status
Stable since ICU 2.0.

Method Detail

getStringback to summary
public String getString()

Gets the current string from the iterator. Only use after calling next(), not nextRange().

ICU Status
Stable since ICU 4.0.
loadRangeback to summary
private void loadRange(int aRange)
nextback to summary
public boolean next()

Returns the next element in the set, either a single code point or a string. If there are no more elements in the set, return false. If codepoint == IS_STRING, the value is a string in the string field. Otherwise the value is a single code point in the codepoint field.

The order of iteration is all code points in sorted order, followed by all strings sorted order. codepointEnd is undefined after calling this method. string is undefined unless codepoint == IS_STRING. Do not mix calls to next() and nextRange() without calling reset() between them. The results of doing so are undefined.

Warning

For speed, UnicodeSet iteration does not check for concurrent modification. Do not alter the UnicodeSet while iterating.

Returns:boolean

true if there was another element in the set and this object contains the element.

ICU Status
Stable since ICU 2.0.
nextRangeback to summary
public boolean nextRange()

Returns the next element in the set, either a code point range or a string. If there are no more elements in the set, return false. If codepoint == IS_STRING, the value is a string in the string field. Otherwise the value is a range of one or more code points from codepoint to codepointeEnd inclusive.

The order of iteration is all code points ranges in sorted order, followed by all strings sorted order. Ranges are disjoint and non-contiguous. string is undefined unless codepoint == IS_STRING. Do not mix calls to next() and nextRange() without calling reset() between them. The results of doing so are undefined.

Returns:boolean

true if there was another element in the set and this object contains the element.

ICU Status
Stable since ICU 2.0.
resetback to summary
public void reset(UnicodeSet uset)

Sets this iterator to visit the elements of the given set and resets it to the start of that set. The iterator is valid only so long as set is valid.

Parameters
uset:UnicodeSet

the set to iterate over.

ICU Status
Stable since ICU 2.0.
resetback to summary
public void reset()

Resets this iterator to the start of the set.

ICU Status
Stable since ICU 2.0.
skipToStringsback to summary
public UnicodeSetIterator skipToStrings()

Skips over the remaining code points/ranges, if any. A following call to next() or nextRange() will yield a string, if there is one. No-op if next() would return false, or if it would yield a string anyway.

Returns:UnicodeSetIterator

this

ICU Status
Stable since ICU 70.
See Also
UnicodeSet#strings()