public class CharSequenceScanner extends Object implements CharStreamScanner
String
or better a sequence of characters ( char[]
) together with a
position
in that sequence. converts
String
s 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 |
---|---|
private void |
appendFromStartToPos(StringBuilder result,
int start,
boolean omitLast) |
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
private char[] chars
private int pos
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()
CharStreamScanner
0
. In other words this
method returns the number of characters that have already been consumed
.getCurrentIndex
in interface CharStreamScanner
public 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()
CharStreamScanner
hasNext
in interface CharStreamScanner
true
if there is at least one character available, false
if the end has been reached.public char next()
CharStreamScanner
index
stepping to the next
character. You need to check
if a character is available before calling this method.next
in interface CharStreamScanner
public char forceNext()
CharStreamScanner
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 CharStreamScanner
0
if none is available
.public char peek()
CharStreamScanner
index
. You need to
check
if a character is available before calling this method.peek
in interface CharStreamScanner
public 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()
CharStreamScanner
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 CharStreamScanner
0
if none is available
.public void stepBack()
public boolean skipUntil(char stop)
CharStreamScanner
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 CharStreamScanner
stop
- 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)
CharStreamScanner
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 CharStreamScanner
stop
- 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)
CharStreamScanner
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 CharStreamScanner
filter
- 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)
CharStreamScanner
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. CharStreamScanner
scanner = 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 CharStreamScanner
stop
- 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
.private void appendFromStartToPos(StringBuilder result, int start, boolean omitLast)
public String readUntil(char stop, boolean acceptEof, CharScannerSyntax syntax)
CharStreamScanner
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 CharStreamScanner
stop
- 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)
CharStreamScanner
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 CharStreamScanner
count
- 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()
CharStreamScanner
next character
if it is a digit. Else the state remains unchanged.readDigit
in interface CharStreamScanner
0
if '0'
) or -1
if the
current character
is no Latin digit.public long readLong(int maxDigits) throws NumberFormatException
CharStreamScanner
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 CharStreamScanner
maxDigits
- 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
CharStreamScanner
current position
by
reading as many matching characters as available and returns its parsed
value.
readDouble
in interface CharStreamScanner
NumberFormatException
- if the current current position
does NOT point to a
number.public float readFloat() throws NumberFormatException
CharStreamScanner
current position
by
reading as many matching characters as available and returns its parsed
value.
readFloat
in interface CharStreamScanner
NumberFormatException
- if the current current position
does NOT point to a
number.private String consumeDecimal()
String
.public boolean skipOver(String substring, boolean ignoreCase)
CharStreamScanner
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 CharStreamScanner
substring
- 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)
CharStreamScanner
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 CharStreamScanner
substring
- 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)
CharStreamScanner
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 CharStreamScanner
expected
- 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
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 CharStreamScanner
expected
- 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)
CharStreamScanner
current character
is equal to the given expected
character.
expect
in interface CharStreamScanner
expected
- is the expected character.true
if the current character is the same as expected
, false
otherwise.public void require(char expected) throws NlsParseException
CharStreamScanner
current character
is equal to the given expected
character.
require
in interface CharStreamScanner
expected
- 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
CharStreamScanner
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 CharStreamScanner
expected
- 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)
CharStreamScanner
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 CharStreamScanner
stop
- 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)
CharStreamScanner
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 CharStreamScanner
c
- is the character to read over.public int skipWhile(CharFilter filter)
CharStreamScanner
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 CharStreamScanner
filter
- 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)
CharStreamScanner
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 CharStreamScanner
filter
- 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)
CharStreamScanner
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 CharStreamScanner
filter
- 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)
CharStreamScanner
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 CharStreamScanner
filter
- 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–2016 mmm-Team. All rights reserved.