Class UnicodeSetIterator
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.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionintCurrent code point, or the special valueIS_STRING, if the iterator points to a string.intWhen iterating over ranges usingnextRange(),codepointEndcontains the inclusive end of the iteration range, ifcodepoint != IS_STRING.private intprivate intstatic final intValue ofcodepointif the iterator points to a string.private intprivate intprivate UnicodeSetIfcodepoint == IS_STRING, thenstringpoints to the current string.Invariant: stringIterator is null when there are no (more) strings remaining -
Constructor Summary
ConstructorsConstructorDescriptionCreate an iterator over nothing.Create an iterator over the given set. -
Method Summary
Modifier and TypeMethodDescriptionGets the current string from the iterator.private voidloadRange(int aRange) booleannext()Returns the next element in the set, either a single code point or a string.booleanReturns the next element in the set, either a code point range or a string.voidreset()Resets this iterator to the start of the set.voidreset(UnicodeSet uset) Sets this iterator to visit the elements of the given set and resets it to the start of that set.Skips over the remaining code points/ranges, if any.
-
Field Details
-
IS_STRING
public static final int IS_STRINGValue ofcodepointif the iterator points to a string. Ifcodepoint == IS_STRING, then examinestringfor the current iteration result.- See Also:
-
codepoint
public int codepointCurrent code point, or the special valueIS_STRING, if the iterator points to a string. -
codepointEnd
public int codepointEndWhen iterating over ranges usingnextRange(),codepointEndcontains the inclusive end of the iteration range, ifcodepoint != IS_STRING. If iterating over code points usingnext(), or ifcodepoint == IS_STRING, then the value ofcodepointEndis undefined. -
string
Ifcodepoint == IS_STRING, thenstringpoints to the current string. Ifcodepoint != IS_STRING, the value ofstringis undefined. -
set
-
endRange
private int endRange -
range
private int range -
endElement
private int endElement -
nextElement
private int nextElement -
stringIterator
-
-
Constructor Details
-
UnicodeSetIterator
Create an iterator over the given set.- Parameters:
set- set to iterate over
-
UnicodeSetIterator
public UnicodeSetIterator()Create an iterator over nothing.next()andnextRange()return false. This is a convenience constructor allowing the target to be set later.
-
-
Method Details
-
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:
- this
- See Also:
-
next
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. Ifcodepoint == IS_STRING, the value is a string in thestringfield. Otherwise the value is a single code point in thecodepointfield.The order of iteration is all code points in sorted order, followed by all strings sorted order.
codepointEndis undefined after calling this method.stringis undefined unlesscodepoint == IS_STRING. Do not mix calls tonext()andnextRange()without callingreset()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:
- true if there was another element in the set and this object contains the element.
-
nextRange
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. Ifcodepoint == IS_STRING, the value is a string in thestringfield. Otherwise the value is a range of one or more code points fromcodepointtocodepointeEndinclusive.The order of iteration is all code points ranges in sorted order, followed by all strings sorted order. Ranges are disjoint and non-contiguous.
stringis undefined unlesscodepoint == IS_STRING. Do not mix calls tonext()andnextRange()without callingreset()between them. The results of doing so are undefined.- Returns:
- true if there was another element in the set and this object contains the element.
-
reset
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 assetis valid.- Parameters:
uset- the set to iterate over.
-
reset
public void reset()Resets this iterator to the start of the set. -
getString
Gets the current string from the iterator. Only use after calling next(), not nextRange(). -
loadRange
private void loadRange(int aRange)
-