public class CharSequenceScanner extends Object implements CharStreamScanner
String or better a sequence of characters ( char[]) together
with a position in that sequence. converts Strings to a char array
instead of frequently calling String.charAt(int). | Modifier and Type | Field and Description |
|---|---|
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 and Description |
|---|
CharSequenceScanner(char[] characters)
The constructor.
|
CharSequenceScanner(char[] characters,
int offset,
int length)
The constructor.
|
CharSequenceScanner(CharSequence charSequence)
The constructor.
|
CharSequenceScanner(String string)
The constructor.
|
| Modifier and Type | Method and Description |
|---|---|
void |
appendSubstring(StringBuffer buffer,
int start,
int end)
|
char |
charAt(int index) |
private String |
consumeDecimal()
Consumes the characters of a decimal number (double or float).
|
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()
|
char |
forcePeek()
|
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. |
protected String |
getTail()
This method gets the tail of this scanner without changing the state.
|
protected String |
getTail(int maximum)
This method gets the tail of this scanner limited (truncated) to the given
maximum number of
characters without changing the state. |
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 |
peek(int count)
This method peeks the number of
next characters given by count and returns
them as string. |
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. |
double |
readDouble()
This method reads the double value (decimal number) starting at the
current
position by reading as many matching characters as available and returns its
parsed value. |
float |
readFloat()
This method reads the float value (decimal number) starting at the
current
position by reading as many matching characters as available and returns its
parsed value. |
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 |
readUntil(CharFilter filter,
boolean acceptEof)
This method reads all
next characters until the first character
accepted by the given filter or the end is reached. |
String |
readWhile(CharFilter filter)
|
String |
readWhile(CharFilter filter,
int max)
|
void |
require(char expected)
This method verifies that the
current character is equal to the given
expected character. |
void |
require(String expected,
boolean ignoreCase)
This method verifies that the
expected string gets consumed from this scanner with respect
to ignoreCase. |
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)
|
int |
skipWhile(CharFilter filter,
int max)
|
void |
stepBack()
This method decrements the
index by one. |
String |
substring(int start,
int end) |
String |
toString() |
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.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).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 String peek(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. Unlike read(int) this
method does NOT consume the characters and will therefore NOT change the state of this scanner.count - is the number of characters to peek. You may use Integer.MAX_VALUE to peek 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 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()
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(CharFilter filter, boolean acceptEof)
next characters until the first character
accepted by the given filter or the end is reached. current index will point to the next
character after the first accepted character or to the end if NO such
character exists and acceptEof is true. Otherwise, if null is
returned, the current index will remain unchanged.readUntil in interface CharStreamScannerfilter - is used to decide where to stop.acceptEof - if true EOF will be treated as stop, too.accepted by the given
filter character or null if there was no
accepted 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). Use 19 or higher to be able to read any long number.NumberFormatException - if the current current position does NOT point
to a number.public double readDouble()
throws NumberFormatException
current
position by reading as many matching characters as available and returns its
parsed value. readDouble in interface CharStreamScannerNumberFormatException - if the current current position does NOT point
to a number.public float readFloat()
throws NumberFormatException
current
position by reading as many matching characters as available and returns its
parsed value. readFloat in interface CharStreamScannerNumberFormatException - if the current current position does NOT point
to a number.private String consumeDecimal()
String.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 void require(char expected)
throws NlsParseException
current character is equal to the given
expected character. require in interface CharStreamScannerexpected - is the expected character.NlsParseException - if the expected character was NOT found.protected String getTail()
protected String getTail(int maximum)
maximum number of
characters without changing the state.maximum - is the maximum number of characters to return from the tail.public void require(String expected, boolean ignoreCase) throws NlsParseException
expected string gets consumed from this scanner with respect
to ignoreCase. Otherwise an exception is thrown indicating the problem. if (!scanner.expectStrict(expected, ignoreCase)) { throw newNlsParseException(scanner.read(expected.length), expected); }
require in interface CharStreamScannerexpected - is the expected string.ignoreCase - - if true the case of the characters is ignored during comparison.NlsParseException - if the expected string was NOT found.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)Copyright © 2001–2015 mmm-Team. All rights reserved.