|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectnet.sf.mmm.util.scanner.base.CharSequenceScanner
public class CharSequenceScanner
This class represents a String or better a sequence of characters (
char[]) together with a position in
that sequence.
It has various useful methods for scanning the sequence. This scanner is
designed to be fast on long sequences and therefore internally
converts Strings to a char array instead
of frequently calling String.charAt(int).
ATTENTION:
This implementation is NOT and has no intention to be thread-safe.
| Field Summary | |
|---|---|
private char[] |
chars
the string to parse as char array |
private int |
endIndex
The exclusive end-index in chars. |
private int |
length
The length of the char-sequence: . |
private int |
pos
|
private int |
startIndex
The start-index in chars. |
private String |
str
|
| Constructor Summary | |
|---|---|
CharSequenceScanner(char[] characters)
The constructor. |
|
CharSequenceScanner(char[] characters,
int offset,
int length)
The constructor. |
|
CharSequenceScanner(CharSequence charSequence)
The constructor. |
|
CharSequenceScanner(String string)
The constructor. |
|
| Method Summary | |
|---|---|
void |
appendSubstring(StringBuffer buffer,
int start,
int end)
This method appends the substring specified by
start and end to the given buffer. |
char |
charAt(int index)
|
boolean |
expect(char expected)
This method checks that the current character is equal to
the given expected character. |
boolean |
expect(String expected,
boolean ignoreCase)
This method skips all next characters as long as they equal
to the according character of the expected string. |
boolean |
expectStrict(String expected,
boolean ignoreCase)
This method acts as CharStreamScanner.expect(String, boolean) but if the expected
String is NOT completely present, no character is consumed
and the state of the scanner remains unchanged. |
char |
forceNext()
Like CharStreamScanner.next() this method reads the current character and increments the index. |
char |
forcePeek()
This method reads the current character without
incrementing the index. |
int |
getCurrentIndex()
This method gets the current position in the stream to scan. |
int |
getLength()
|
String |
getOriginalString()
This method gets the original string to parse. |
String |
getReplaced(String substitute,
int start,
int end)
This method gets the original string where the
substring specified by start and
end is replaced by substitute. |
boolean |
hasNext()
This method determines if there is at least one more character available. |
char |
next()
This method reads the current character and increments the index stepping to the next character. |
char |
peek()
This method reads the current character without incrementing the index. |
String |
read(int count)
This method reads the number of next characters given by
count and returns them as string. |
int |
readDigit()
This method reads the next character if it is a digit. |
long |
readLong(int maxDigits)
This method reads the long starting at the current position by reading as many Latin digits as available but at
maximum the given maxDigits and returns its
parsed value. |
String |
readUntil(char stop,
boolean acceptEof)
This method reads all next characters until the given
stop character or the end is reached. |
String |
readUntil(char stop,
boolean acceptEof,
char escape)
This method reads all next characters until the given
(un-escaped) stop character or the end is reached. |
String |
readUntil(char stop,
boolean acceptEof,
CharScannerSyntax syntax)
This method reads all next characters until the given
stop character or the end of the string to parse is reached. |
String |
readWhile(CharFilter filter)
This method reads all next characters that are
accepted by the given filter. |
String |
readWhile(CharFilter filter,
int max)
This method reads all next characters that are
accepted by the given filter. |
void |
setCurrentIndex(int index)
This method sets the current index. |
boolean |
skipOver(String substring,
boolean ignoreCase)
This method reads all next characters until the given
substring has been detected. |
boolean |
skipOver(String substring,
boolean ignoreCase,
CharFilter stopFilter)
This method reads all next characters until the given
substring has been detected. |
boolean |
skipUntil(char stop)
This method skips all next characters until the given
stop character or the end is reached. |
boolean |
skipUntil(char stop,
char escape)
This method reads all next characters until the given
stop character or the end of the string to parse is reached. |
int |
skipWhile(char c)
This method reads all next characters that are identical to
the character given by c. |
int |
skipWhile(CharFilter filter)
This method reads all next characters that are
accepted by the given filter. |
int |
skipWhile(CharFilter filter,
int max)
This method reads all next characters that are
accepted by the given filter. |
void |
stepBack()
This method decrements the index by one. |
String |
substring(int start,
int end)
|
String |
toString()
|
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
private String str
getOriginalString()private char[] chars
private int pos
getCurrentIndex()private final int startIndex
chars.
private final int endIndex
chars.
private final int length
endIndex - startIndex.
| Constructor Detail |
|---|
public CharSequenceScanner(CharSequence charSequence)
charSequence - is the string to scan.public CharSequenceScanner(String string)
string - is the string to parse.public CharSequenceScanner(char[] characters)
characters - is an array containing the characters to scan.
public CharSequenceScanner(char[] characters,
int offset,
int length)
characters - is an array containing the characters to scan.offset - is the index of the first char to scan in
characters (typically 0 to start at the
beginning of the array).length - is the number of characters to scan from
characters starting at offset (typically
characters.length - offset).| Method Detail |
|---|
public char charAt(int index)
index - is the index of the requested character.
index.CharSequence.charAt(int)public int getLength()
string to
parse.CharSequence.length()
public String substring(int start,
int end)
start - the start index, inclusive.end - the end index, exclusive.
String.substring(int, int),
appendSubstring(StringBuffer, int, int)
public String getReplaced(String substitute,
int start,
int end)
original string where the
substring specified by start and
end is replaced by substitute.
substitute - is the string used as replacement.start - is the inclusive start index of the substring to replace.end - is the exclusive end index of the substring to replace.
original string with the specified
substring replaced by substitute.
public void appendSubstring(StringBuffer buffer,
int start,
int end)
substring specified by
start and end to the given buffer.
buffer - is the buffer where to append the substring to.start - the start index, inclusive.end - the end index, exclusive.public int getCurrentIndex()
0. In other words this method returns the number
of characters that have already been consumed.
getCurrentIndex in interface CharStreamScannerpublic void setCurrentIndex(int index)
current index.
index - is the next index position to set. The value has to be greater
or equal to 0 and less or equal to getLength()
.public boolean hasNext()
hasNext in interface CharStreamScannertrue if there is at least one character available,
false if the end has been reached.public char next()
index stepping to the next character. You need
to check if a character is available before calling this
method.
next in interface CharStreamScannerpublic char forceNext()
CharStreamScanner.next() this method reads the current character and increments the index. If
there is no character available this method will do
nothing and returns 0 (the NULL character and NOT
'0').
forceNext in interface CharStreamScanner0 if none is
available.public char peek()
index. You need to check if a
character is available before calling this method.
peek in interface CharStreamScannerpublic char forcePeek()
current character without
incrementing the index. If there is no character
available this method will return 0 (the
NULL character and NOT '0').
forcePeek in interface CharStreamScanner0 if none is
available.public void stepBack()
index by one. If the
index is 0 this method will have no
effect.
public boolean skipUntil(char stop)
next characters until the given
stop character or the end is reached. If the stop
character was reached, this scanner will point to the next character after
stop when this method returns.
skipUntil in interface CharStreamScannerstop - is the character to read until.
true if the first occurrence of the given
stop character has been passed, false if
there is no such character.
public String readUntil(char stop,
boolean acceptEof)
next characters until the given
stop character or the end is reached.current index
will point to the next character after the (first) stop
character or to the end if NO such character exists.
readUntil in interface CharStreamScannerstop - is the character to read until.acceptEof - if true EOF will be treated as
stop, too.
stop
character or null if there was no stop
character and acceptEof is false.
public String readUntil(char stop,
boolean acceptEof,
char escape)
next characters until the given
(un-escaped) stop character or the end is reached.CharStreamScanner.readUntil(char, boolean), this method allows that
the stop character may be used in the input-string by adding
the given escape character. After the call of this method, the
current index will point to the next character
after the (first) stop character or to the end if NO such
character exists.CharStreamScannerscanner = getScanner(); doSomething(); char c = scanner.CharStreamScanner.forceNext(); if ((c == '"') || (c == '\'')) { char escape = c; // may also be something like '\' String quote = scanner.readUntil(c, false, escape) } else { doOtherThings(); }
readUntil in interface CharStreamScannerstop - is the character to read until.acceptEof - if true EOF will be treated as
stop, too.escape - is the character used to escape the stop
character. To add an occurrence of the escape character
it has to be duplicated (occur twice). The escape
character may also be equal to the stop character. If
other regular characters are escaped the escape
character is simply ignored.
stop
character or null if there was no stop
character and acceptEof is false.
public String readUntil(char stop,
boolean acceptEof,
CharScannerSyntax syntax)
next characters until the given
stop character or the end of the string to parse is reached.
In advance to CharStreamScanner.readUntil(char, boolean), this method will scan the
input using the given syntax which e.g. allows to
escape the stop character. current index
will point to the next character after the (first) stop
character or to the end of the string if NO such character exists.
readUntil in interface CharStreamScannerstop - is the character to read until.acceptEof - if true EOF will be treated as
stop, too.syntax - contains the characters specific for the syntax to read.
stop
character or null if there was no stop
character.public String read(int count)
next characters given by
count and returns them as string. If there are less characters
available the returned string will be shorter than
count and only contain the available characters.
read in interface CharStreamScannercount - is the number of characters to read. You may use
Integer.MAX_VALUE to read until the end of data if the
data-size is suitable.
count. Will be the empty
string if no character is available at all.public int readDigit()
next character if it is a digit. Else
the state remains unchanged.
readDigit in interface CharStreamScanner0 if
'0') or -1 if the current
character is no Latin digit.
public long readLong(int maxDigits)
throws NumberFormatException
current position by reading as many Latin digits as available but at
maximum the given maxDigits and returns its
parsed value.+ or -) to do
so, scan them yourself before and negate the result as needed.
readLong in interface CharStreamScannermaxDigits - is the maximum number of digits that will be read. The
value has to be positive (greater than zero).
NumberFormatException - if the current current position does NOT point to a number.
public boolean skipOver(String substring,
boolean ignoreCase)
next characters until the given
substring has been detected.current index
will point to the next character after the first occurrence of
substring or to the end of the string if the given
substring was NOT found.
skipOver in interface CharStreamScannersubstring - is the substring to search and skip over starting at the
current index.ignoreCase - - if true the case of the characters is
ignored when compared with characters from substring.
true if the given substring occurred and
has been passed and false if the end of the string has
been reached without any occurrence of the given
substring.
public boolean skipOver(String substring,
boolean ignoreCase,
CharFilter stopFilter)
next characters until the given
substring has been detected.stop character is detected by the
given stopFilter this method returns false
pointing to the character next to that stop character. Otherwise after this
method, the current index will point to the next
character after the first occurrence of substring or to the
end of the string if the given substring was NOT found.
skipOver in interface CharStreamScannersubstring - is the substring to search and skip over starting at the
current index.ignoreCase - - if true the case of the characters is
ignored when compared with characters from substring.stopFilter - is the filter used to detect stop characters. If such character was detected, the skip is
stopped and the parser points to the character after the stop
character. The substring should NOT contain a
stop character.
true if the given substring occurred and
has been passed and false if a stop character has been
detected or the end of the string has been reached without any
occurrence of the given substring or stop character.
public boolean expect(String expected,
boolean ignoreCase)
next characters as long as they equal
to the according character of the expected string.expected. Except for the latter
circumstance, this method behaves like the following code:
read(expected.length).equals[IgnoreCase](expected)
ATTENTION:
expect in interface CharStreamScannerexpected - is the expected string.ignoreCase - - if true the case of the characters is
ignored when compared.
true if the expected string was
successfully consumed from this scanner, false
otherwise.
public boolean expectStrict(String expected,
boolean ignoreCase)
CharStreamScanner.expect(String, boolean) but if the expected
String is NOT completely present, no character is consumed
and the state of the scanner remains unchanged.
expectStrict in interface CharStreamScannerexpected - is the expected string.ignoreCase - - if true the case of the characters is
ignored when compared.
true if the expected string was
successfully consumed from this scanner, false
otherwise.public boolean expect(char expected)
current character is equal to
the given expected character.
expect in interface CharStreamScannerexpected - is the expected character.
true if the current character is the same as
expected, false otherwise.
public boolean skipUntil(char stop,
char escape)
next characters until the given
stop character or the end of the string to parse is reached.
In advance to CharStreamScanner.skipUntil(char), this method will read over the
stop character if it is escaped with the given
escape character.
skipUntil in interface CharStreamScannerstop - is the character to read until.escape - is the character used to escape the stop character (e.g.
'\').
true if the first occurrence of the given
stop character has been passed, false if
there is no such character.public int skipWhile(char c)
next characters that are identical to
the character given by c.readWhile(' ') to skip all
blanks from the current index. After the call of
this method, the current index will point to the
next character that is different to c or to the end if NO such
character exists.
skipWhile in interface CharStreamScannerc - is the character to read over.
public int skipWhile(CharFilter filter)
next characters that are
accepted by the given filter.current index
will point to the next character that was NOT
accepted by the given filter
or to the end if NO such character exists.
skipWhile in interface CharStreamScannerfilter - is used to decide which
characters should be accepted.
accepted
by the given filter that have been skipped.CharStreamScanner.skipWhile(char)
public int skipWhile(CharFilter filter,
int max)
next characters that are
accepted by the given filter.current index
will point to the next character that was NOT
accepted by the given filter.
If the next max characters or the characters left until the
end of this scanner are accepted, only that amount of characters are skipped.
skipWhile in interface CharStreamScannerfilter - is used to decide which
characters should be accepted.max - is the maximum number of characters that should be skipped.
CharStreamScanner.skipWhile(char)public String readWhile(CharFilter filter)
next characters that are
accepted by the given filter.current index
will point to the next character that was NOT
accepted by the given filter
or to the end if NO such character exists.
readWhile in interface CharStreamScannerfilter - is used to decide which
characters should be accepted.
accepted by the given filter. Will be the empty
string if no character was accepted.CharStreamScanner.skipWhile(CharFilter)
public String readWhile(CharFilter filter,
int max)
next characters that are
accepted by the given filter.current index
will point to the next character that was NOT
accepted by the given filter.
If the next max characters or the characters left until the
end of this scanner are accepted, only that amount of characters are skipped.
readWhile in interface CharStreamScannerfilter - is used to decide which
characters should be accepted.max - is the maximum number of characters that should be read.
accepted by the given filter limited to the length of
max and the end of this scanner.
Will be the empty string if no character was accepted.CharStreamScanner.skipWhile(char)public String getOriginalString()
CharSequenceScanner(String)public String toString()
toString in class Object
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||