public class Cursor extends Object
A parsing cursor over the characters read. Cursor
allows for token iterations over any CharSequence
.
String str = "this is a test"; Cursor cursor = new Cursor(); for (CharSequence token; (token=cursor.nextToken(str, ' '))!= null;) System.out.println(token);
this is a testCursors are typically used with
TextFormat
instances.
// Parses decimal number (e.g. "xxx.xxxxxExx" or "NaN") public Decimal parse(CharSequence csq, Cursor cursor) throws IllegalArgumentException { TextFormat<LargeInteger> largeIntegerFormat = TextContext.getFormat(LargeInteger.class); if (cursor.skip("NaN", csq)) return Decimal.NaN; LargeInteger significand = LargeIntegerFormat.parse(csq, cursor); LargeInteger fraction = cursor.skip('.', csq) ? largeIntegerFormat.parse(csq, cursor) : LargeInteger.ZERO; int exponent = cursor.skip(CharSet.valueOf('E', 'e'), csq) ? TypeFormat.parseInt(csq, cursor) : 0; int fractionDigits = fraction.digitLength(); return Decimal.valueOf(significand.E(fractionDigits).plus(fraction), exponent - fractionDigits); }
Constructor and Description |
---|
Cursor()
Default constructor.
|
Modifier and Type | Method and Description |
---|---|
boolean |
at(char c,
CharSequence csq)
Indicates if this cursor points to the specified character in the
specified character sequence.
|
boolean |
at(CharSet charSet,
CharSequence csq)
Indicates if this cursor points to any of the specified character in the
specified character sequence.
|
boolean |
at(String str,
CharSequence csq)
Indicates if this cursor points to the specified characters in the
specified sequence.
|
boolean |
atEnd(CharSequence csq)
Indicates if this cursor points to the end of the specified
character sequence.
|
char |
currentChar(CharSequence csq)
Returns the current character at this cursor position.
|
boolean |
equals(Object obj)
Indicates if this cursor is equals to the specified object.
|
int |
getIndex()
Returns this cursor index.
|
int |
hashCode()
Returns the hash code for this cursor.
|
CharSequence |
head(CharSequence csq)
Returns the head of the specified character sequence until
this cursor position.
|
Cursor |
increment()
Increments the cursor index by one.
|
Cursor |
increment(int i)
Increments the cursor index by the specified value.
|
char |
nextChar(CharSequence csq)
Returns the next character at this cursor position.The cursor
position is incremented by one.
|
CharSequence |
nextToken(CharSequence csq,
char c)
Returns the subsequence from the specified cursor position not holding
the specified character.
|
CharSequence |
nextToken(CharSequence csq,
CharSet charSet)
Returns the subsequence from the specified cursor position not holding
any of the characters specified.
|
void |
setIndex(int i)
Sets the cursor current index.
|
boolean |
skip(char c,
CharSequence csq)
Moves this cursor forward only if at the specified character.
|
boolean |
skip(CharSet charSet,
CharSequence csq)
Moves this cursor forward only if at any of the specified character.
|
boolean |
skip(String str,
CharSequence csq)
Moves this cursor forward only if at the specified string.
|
boolean |
skipAny(char c,
CharSequence csq)
Moves this cursor forward until it points to a character
different from the specified character.
|
boolean |
skipAny(CharSet charSet,
CharSequence csq)
Moves this cursor forward until it points to a character
different from any of the character in the specified set.
|
CharSequence |
tail(CharSequence csq)
Returns the tail of the specified character sequence starting at
this cursor position.
|
String |
toString()
Returns the string representation of this cursor.
|
public final int getIndex()
public final void setIndex(int i)
i
- the index of the next character to parse.public final boolean atEnd(CharSequence csq)
csq
- the character sequence iterated by this cursor.getIndex() >= csq.length()
public final boolean at(char c, CharSequence csq)
c
- the character to test.csq
- the character sequence iterated by this cursor.csq.charAt(this.getIndex()) == c
public final boolean at(CharSet charSet, CharSequence csq)
charSet
- any of the character to test.csq
- the character sequence iterated by this cursor.csq.charAt(this.getIndex()) == c
public final boolean at(String str, CharSequence csq)
str
- the characters to test.csq
- the character sequence iterated by this cursor.true
if this cursor points to the specified
characters; false
otherwise.public final char currentChar(CharSequence csq)
csq
- the character sequence iterated by this cursor.IndexOutOfBoundsException
- if this.atEnd(csq)
public final char nextChar(CharSequence csq)
csq
- the character sequence iterated by this cursor.IndexOutOfBoundsException
- if this.atEnd(csq)
public final boolean skipAny(char c, CharSequence csq)
c
- the character to skip.csq
- the character sequence iterated by this cursor.true
if this cursor has skipped at least one
character;false
otherwise (e.g. end of sequence
reached).public final boolean skipAny(CharSet charSet, CharSequence csq)
// Reads numbers separated by tabulations or spaces. FastTable<Integer> numbers = new FastTable<Integer>(); while (cursor.skipAny(CharSet.SPACE_OR_TAB, csq)) { numbers.add(TypeFormat.parseInt(csq, cursor)); }
charSet
- the character to skip.csq
- the character sequence iterated by this cursor.true
if this cursor has skipped at least one
character;false
otherwise (e.g. end of sequence
reached).public final boolean skip(char c, CharSequence csq)
if (at(c, csq))
increment();
c
- the character to skip.csq
- the character sequence iterated by this cursor.true
if this cursor has skipped the specified
character;false
otherwise.public final boolean skip(CharSet charSet, CharSequence csq)
if (at(charSet, csq))
increment();
charSet
- holding the characters to skip.csq
- the character sequence iterated by this cursor.true
if this cursor has skipped any the specified
character;false
otherwise.public final boolean skip(String str, CharSequence csq)
if (at(str, csq))
increment(str.length());
str
- the string to skip.csq
- the character sequence iterated by this cursor.true
if this cursor has skipped the specified
string;false
otherwise (e.g. end of sequence
reached).public final CharSequence nextToken(CharSequence csq, char c)
CharSequence csq = "This is a test"; for (CharSequence token; (token=cursor.nextToken(csq, ' '))!= null;) { System.out.println(token); // Prints one word at a time. }
csq
- the character sequence iterated by this cursor.c
- the character being skipped.null
if none.public final CharSequence nextToken(CharSequence csq, CharSet charSet)
CharSequence csq = "This is a test"; for (CharSequence token; (token=cursor.nextToken(csq, CharSet.WHITESPACE))!= null;) { System.out.println(token); // Prints one word at a time. }
csq
- the character sequence iterated by this cursor.charSet
- the characters being skipped.null
if none.public final CharSequence head(CharSequence csq)
public final CharSequence tail(CharSequence csq)
public final Cursor increment()
this
public final Cursor increment(int i)
i
- the increment value.this
public String toString()
public boolean equals(Object obj)
Copyright © 2005-2013 Javolution. All Rights Reserved.