|
|||||||||
| Home >> All >> [ cformat overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
cformat
Class ScanfReader

java.lang.Objectjava.io.Reader
cformat.ScanfReader
- public class ScanfReader
- extends java.io.Reader
A Reader which implements C scanf functionality. Once created, an application can read various primitive types from the underlying stream using various scan methods that implement scanf type input formatting.
There are scan methods to read float, double, long, int, char, char[], and String. The methods take as an argument either a format string, a pre-allocated ScanfFormat object which is created from a format string, or no argument (implying a default format). The format string is modeled after that accepted by the C scanf() methodName, and is described in the documentation for the class ScanfFormat.
Because Java does not permit variable-length argument lists, only one primitive type may be returned per method, and the format used may contain only one conversion specification (which must be appropriate to the type being scanned).
Input errors in the underlying Reader result in a java.io.IOException being thrown, while a java.io.EOFException is thrown if the end of input is reached before the scan can complete successfully. If the input does not match the specified format, then a ScanfMatchException is thrown. In the event of a match error, scanning stops at the first character from which it can be determined that the match will fail. This character is remembered by the stream (see the discussion of the look-ahead character, below) and will be the first character seen by the next scan or read method which is called. Finally, an invalid format string (or ScanfFormat object) will trigger an InvalidArgumentException.
The class keeps track of the current line number (accessible with the methods getLineNumber and setLineNumber), as well as the number of characters which have been consumed (accesible with the methods getCharNumber and setCharNumber).
The class usually keeps one character of look-ahead which has been read from the underlying reader but not yet consumed by any scan method. If the underlying reader is used later in some other capacity, this look-ahead character may have to be taken into account. If a look-ahead character is actually being stored, the lookAheadCharValid method will return true, and the look-ahead character itself can then be obtained using the getLookAheadChar method. The look-ahead character can be cleared using the clearLookAheadChar method.
| Field Summary | |
private int |
bcnt
|
private char[] |
buffer
|
private static int |
BUFSIZE
|
private int |
charCnt
|
private int |
curChar
|
private boolean |
curCharValid
|
private static ScanfFormat |
defaultCharFmt
|
private static ScanfFormat |
defaultDecFmt
|
private static ScanfFormat |
defaultDoubleFmt
|
private static ScanfFormat |
defaultHexFmt
|
private static ScanfFormat |
defaultIntFmt
|
private static ScanfFormat |
defaultOctFmt
|
private static ScanfFormat |
defaultStringFmt
|
private static java.lang.String |
hexChars
|
private int |
lastChar
|
private int |
lineCnt
|
private static java.lang.String |
octChars
|
private java.io.Reader |
reader
|
private boolean |
spacesCStandardFlag
|
| Fields inherited from class java.io.Reader |
lock |
| Constructor Summary | |
ScanfReader(java.io.Reader in)
Create a new ScanfReader from the given reader. |
|
| Method Summary | |
private boolean |
acceptChar(char c,
int width)
|
private boolean |
acceptDigits(int width)
|
private void |
checkTypeAndScanPrefix(ScanfFormat fmt,
java.lang.String type)
|
void |
clearLookAheadChar()
Clears the look-ahead character. |
void |
close()
Closes the stream. |
private void |
consumeAndReplaceChar()
|
private void |
consumeChar()
|
int |
getCharNumber()
Gets the current character number (equal to the number of characters that have been consumed by the stream). |
int |
getLineNumber()
Gets the current line number. |
int |
getLookAheadChar()
Returns the look-ahead character. |
private void |
initChar()
|
boolean |
lookAheadCharValid()
Returns whether or not a look-ahead character is currently begin stored. |
private void |
matchString(java.lang.String s)
|
int |
read(char[] cbuf,
int off,
int len)
Reads characters into a portion of a character array. |
char |
scanChar()
Scan and return a single character, using the default format string "%c". |
char |
scanChar(ScanfFormat fmt)
Scan and return a single character, using a pre-allocated ScanfFormat object. |
char |
scanChar(java.lang.String s)
Scan and return a single character. |
char[] |
scanChars(int n)
Scan and return a character array, using the default format string "%c", with the field width (number of characters to read) supplanted by the argument n. |
char[] |
scanChars(ScanfFormat fmt)
Scan and return a character array, using a pre-allocated ScanfFormat object. |
private char[] |
scanChars(ScanfFormat fmt,
int w)
Implementing methodName for scanChars. |
char[] |
scanChars(java.lang.String s)
Scan and return a character array, whose size is determined by the field width specified in the format string (with a default width of 1 being assumed if no width is specified). |
long |
scanDec()
Scan and return a signed decimal (long) integer, using the default format string "%d". |
long |
scanDec(ScanfFormat fmt)
Scan and return a signed decimal (long) integer, using a pre-allocated ScanfFormat object. |
private long |
scanDec(ScanfFormat fmt,
int width)
Implementing methodName for scanDec. |
long |
scanDec(java.lang.String s)
Scan and return a signed decimal (long) integer. |
double |
scanDouble()
Scan and return a double, using the default format string "%f". |
double |
scanDouble(ScanfFormat fmt)
Scan and return a double, using a pre-allocated ScanfFormat object. |
double |
scanDouble(java.lang.String s)
Scan and return a double. |
float |
scanFloat()
Scan and return a float, using the default format string "%f". |
float |
scanFloat(ScanfFormat fmt)
Scan and return a float, using a pre-allocated ScanfFormat object. |
float |
scanFloat(java.lang.String s)
Scan and return a float. |
long |
scanHex()
Scan and return a hex (long) integer, using the default format string "%x". |
long |
scanHex(ScanfFormat fmt)
Scan and return a hex (long) integer, using a pre-allocated ScanfFormat object. |
private long |
scanHex(ScanfFormat fmt,
int width)
Implementing methodName for scanHex. |
long |
scanHex(java.lang.String s)
Scan and return a hex (long) integer. |
int |
scanInt()
Scan and return a signed integer, using the default format string "%i". |
int |
scanInt(ScanfFormat fmt)
Scan and return a signed integer, using a pre-allocated ScanfFormat object. |
int |
scanInt(java.lang.String s)
Scan and return a signed integer. |
long |
scanLong()
Scan and return a signed (long) integer, using the default format string "%i". |
long |
scanLong(ScanfFormat fmt)
Scan and return a signed (long) integer, using a pre-allocated ScanfFormat object. |
long |
scanLong(java.lang.String s)
Scan and return a signed (long) integer. |
long |
scanOct()
Scan and return an octal (long) integer, using the default format string "%o". |
long |
scanOct(ScanfFormat fmt)
Scan and return an octal (long) integer, using a pre-allocated ScanfFormat object. |
private long |
scanOct(ScanfFormat fmt,
int width)
Implementing methodName for scanOct. |
long |
scanOct(java.lang.String s)
Scan and return an octal (long) integer. |
private void |
scanPrefix(ScanfFormat fmt)
|
java.lang.String |
scanString()
Scan and return a String, using the default format string "%s". |
java.lang.String |
scanString(ScanfFormat fmt)
Scan and return a String, using a pre-allocated ScanfFormat object. |
java.lang.String |
scanString(java.lang.String s)
Scan and return a String. |
private void |
scanSuffix(ScanfFormat fmt)
|
void |
setCharNumber(int n)
Sets the current character number. |
void |
setLineNumber(int n)
Sets the current line number. |
private boolean |
skipWhiteSpace()
Skip white spacew and count line numbers. |
private int |
skipWhiteSpace(int limit)
Skip white spacew and count line numbers. |
boolean |
useCstandard()
White spaces are skipped at the beginning of a line if flag is true otherwise spaces are counted as valid characters. |
void |
useCstandard(boolean flag)
White spaces are skipped at the beginning of a line if flag is true otherwise spaces are counted as valid characters. |
| Methods inherited from class java.io.Reader |
mark, markSupported, read, read, ready, reset, skip |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
hexChars
private static java.lang.String hexChars
octChars
private static java.lang.String octChars
BUFSIZE
private static final int BUFSIZE
- See Also:
- Constant Field Values
defaultDoubleFmt
private static ScanfFormat defaultDoubleFmt
defaultIntFmt
private static ScanfFormat defaultIntFmt
defaultDecFmt
private static ScanfFormat defaultDecFmt
defaultHexFmt
private static ScanfFormat defaultHexFmt
defaultOctFmt
private static ScanfFormat defaultOctFmt
defaultStringFmt
private static ScanfFormat defaultStringFmt
defaultCharFmt
private static ScanfFormat defaultCharFmt
reader
private java.io.Reader reader
buffer
private char[] buffer
curCharValid
private boolean curCharValid
spacesCStandardFlag
private boolean spacesCStandardFlag
bcnt
private int bcnt
charCnt
private int charCnt
curChar
private int curChar
lastChar
private int lastChar
lineCnt
private int lineCnt
| Constructor Detail |
ScanfReader
public ScanfReader(java.io.Reader in)
- Create a new ScanfReader from the given reader.
| Method Detail |
setCharNumber
public void setCharNumber(int n)
- Sets the current character number.
getCharNumber
public int getCharNumber()
- Gets the current character number (equal to the
number of characters that have been consumed by
the stream).
setLineNumber
public void setLineNumber(int n)
- Sets the current line number.
getLineNumber
public int getLineNumber()
- Gets the current line number. The initial
value (when the Reader is created) is 1.
A new line is recorded upon reading a carriage return, a line
feed, or a carriage return immediately followed by a line feed.
getLookAheadChar
public int getLookAheadChar()
- Returns the look-ahead character.
clearLookAheadChar
public void clearLookAheadChar()
- Clears the look-ahead character.
close
public void close()
throws java.io.IOException
- Closes the stream.
lookAheadCharValid
public boolean lookAheadCharValid()
- Returns whether or not a look-ahead character
is currently begin stored.
read
public int read(char[] cbuf,
int off,
int len)
throws java.io.IOException
- Reads characters into a portion of a character array.
The method will block until input is available, an I/O
error occurs, or the end of the stream is reached.
scanChar
public char scanChar(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a single character.
The format string s must have the form described by the documentation for the class ScanfFormat, and must contain the conversion character 'c' or '['. If the conversion character is '[', then each character scanned must match the sequence specified between the '[' and the closing ']' (see the documentation for ScanfFormat).
White space preceding the character is not skipped.
scanChar
public char scanChar()
throws java.io.IOException,
ScanfMatchException
- Scan and return a single character, using the default format
string "%c".
scanChar
public char scanChar(ScanfFormat fmt) throws java.io.IOException, java.lang.IllegalArgumentException
- Scan and return a single character, using a pre-allocated
ScanfFormat object.
This saves the overhead of parsing the format from a string.
scanChars
public char[] scanChars(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a character array, whose size is determined
by the field width specified in the format string (with a
default width of 1 being assumed if no width is specified).
The format string s must have the form described by the documentation for the class ScanfFormat, and must contain the conversion characters 'c' or '['. If the conversion character is '[', then each character scanned must match the sequence specified between the '[' and the closing ']' (see the documentation for ScanfFormat).
White space preceding the character sequence is not skipped.
scanChars
public char[] scanChars(int n)
throws java.io.IOException,
ScanfMatchException,
java.lang.IllegalArgumentException
- Scan and return a character array, using the default format
string "%c", with the field width (number of characters to
read) supplanted by the argument n.
scanChars
public char[] scanChars(ScanfFormat fmt) throws java.io.IOException, java.lang.IllegalArgumentException
- Scan and return a character array, using a pre-allocated
ScanfFormat object.
This saves the overhead of parsing the format from a string.
scanDec
public long scanDec(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a signed decimal (long) integer.
The format string s must have the form described by the documentation for the class ScanfFormat, and must contain the conversion character 'd'. The integer itself must consist of an optional sign ('+' or '-') followed by a sequence of digits. White space preceding the number is skipped.
scanDec
public long scanDec()
throws java.io.IOException,
ScanfMatchException
- Scan and return a signed decimal (long) integer, using the default format
string "%d".
scanDec
public long scanDec(ScanfFormat fmt) throws java.io.IOException, java.lang.IllegalArgumentException
- Scan and return a signed decimal (long) integer, using a pre-allocated
ScanfFormat object.
This saves the overhead of parsing the format from a string.
scanDouble
public double scanDouble(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a double.
The format string s must have the form described by the documentation for the class ScanfFormat, and must contain the conversion character 'f'. The number itself may consist of (a) an optional sign ('+' or '-'), (b) a sequence of decimal digits, with an optional decimal point, (c) an optional exponent ('e' or 'E'), which must by followed by an optionally signed sequence of decimal digits. White space immediately before the number is skipped.
scanDouble
public double scanDouble()
throws java.io.IOException,
ScanfMatchException
- Scan and return a double, using the default format string "%f".
scanDouble
public double scanDouble(ScanfFormat fmt) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a double, using a pre-allocated
ScanfFormat object.
This saves the overhead of parsing the format from a string.
scanFloat
public float scanFloat(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a float. The format string s
takes the same form as that described in the documentation
for scanDouble(String).
scanFloat
public float scanFloat()
throws java.io.IOException,
ScanfMatchException
- Scan and return a float, using the default format string "%f".
scanFloat
public float scanFloat(ScanfFormat fmt) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a float, using a pre-allocated
ScanfFormat object.
This saves the overhead of parsing the format from a string.
scanHex
public long scanHex(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a hex (long) integer.
The format string s must have the form described by the documentation for the class ScanfFormat, and must contain the conversion character 'x'. The integer itself must be formed from the characters [0-9a-fA-F], and white space which immediately precedes it is skipped.
scanHex
public long scanHex()
throws java.io.IOException,
ScanfMatchException
- Scan and return a hex (long) integer, using the default format
string "%x".
scanHex
public long scanHex(ScanfFormat fmt) throws java.io.IOException, java.lang.IllegalArgumentException
- Scan and return a hex (long) integer, using a pre-allocated
ScanfFormat object.
This saves the overhead of parsing the format from a string.
scanInt
public int scanInt(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a signed integer.
The format string s must have the form described by the documentation for the class ScanfFormat, and must contain one of the conversion characters "doxi".
Specifying the conversion characters 'd', 'o', or 'x' is equivalent to calling (int versions of) scanDec, scanOct, and scanHex, respectively.
If the conversion character is 'i', then after an optional sign ('+' or '-'), if the number begins with an 0x, then it is scanned as a hex number; if it begins with an 0, then it is scanned as an octal number, and otherwise it is scanned as a decimal number. White space preceding the number is skipped.
scanInt
public int scanInt()
throws java.io.IOException,
ScanfMatchException
- Scan and return a signed integer, using the default format
string "%i".
scanInt
public int scanInt(ScanfFormat fmt) throws java.io.IOException, java.lang.IllegalArgumentException
- Scan and return a signed integer, using a pre-allocated
ScanfFormat object.
This saves the overhead of parsing the format from a string.
scanLong
public long scanLong(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a signed (long) integer. Functionality
is identical to that for scanInt(String).
scanLong
public long scanLong()
throws java.io.IOException,
ScanfMatchException
- Scan and return a signed (long) integer, using the default format
string "%i".
scanLong
public long scanLong(ScanfFormat fmt) throws java.io.IOException, java.lang.IllegalArgumentException
- Scan and return a signed (long) integer, using a pre-allocated
ScanfFormat object.
scanOct
public long scanOct(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return an octal (long) integer.
The format string s must have the form described by the documentation for the class ScanfFormat, and must contain the conversion character 'o'. The integer itself must be composed of the digits [0-7], and white space which immediately precedes it is skipped.
scanOct
public long scanOct()
throws java.io.IOException,
ScanfMatchException
- Scan and return an octal (long) integer, using the default format
string "%o".
scanOct
public long scanOct(ScanfFormat fmt) throws java.io.IOException, java.lang.IllegalArgumentException
- Scan and return an octal (long) integer, using a pre-allocated
ScanfFormat object.
This saves the overhead of parsing the format from a string.
scanString
public java.lang.String scanString(java.lang.String s) throws java.io.IOException, ScanfMatchException, java.lang.IllegalArgumentException
- Scan and return a String.
The format string s must have the form described by the documentation for the class ScanfFormat, and must contain the conversion character 's'. The string returned corresponds to the next non-white-space sequence of characters found in the input, with preceding white space skipped.
scanString
public java.lang.String scanString() throws java.io.IOException, ScanfMatchException
- Scan and return a String, using the default format
string "%s".
scanString
public java.lang.String scanString(ScanfFormat fmt) throws java.io.IOException, java.lang.IllegalArgumentException
- Scan and return a String, using a pre-allocated
ScanfFormat object.
This saves the overhead of parsing the format from a string.
useCstandard
public void useCstandard(boolean flag)
- White spaces are skipped at the beginning of a line if
flag is true otherwise spaces
are counted as valid characters.
useCstandard
public boolean useCstandard()
- White spaces are skipped at the beginning of a line if
flag is true otherwise spaces
are counted as valid characters.
acceptChar
private final boolean acceptChar(char c,
int width)
throws java.io.IOException
acceptDigits
private final boolean acceptDigits(int width)
throws java.io.IOException
checkTypeAndScanPrefix
private final void checkTypeAndScanPrefix(ScanfFormat fmt, java.lang.String type) throws java.io.IOException, java.lang.IllegalArgumentException
consumeAndReplaceChar
private final void consumeAndReplaceChar()
throws java.io.IOException
consumeChar
private final void consumeChar()
throws java.io.IOException
initChar
private final void initChar()
throws java.io.IOException
scanPrefix
private final void scanPrefix(ScanfFormat fmt) throws java.io.IOException
scanSuffix
private final void scanSuffix(ScanfFormat fmt) throws java.io.IOException
matchString
private void matchString(java.lang.String s) throws java.io.IOException, ScanfMatchException
scanChars
private char[] scanChars(ScanfFormat fmt, int w) throws java.io.IOException, java.lang.IllegalArgumentException
- Implementing methodName for scanChars.
scanDec
private long scanDec(ScanfFormat fmt, int width) throws java.io.IOException, java.lang.IllegalArgumentException
- Implementing methodName for scanDec.
scanHex
private long scanHex(ScanfFormat fmt, int width) throws java.io.IOException, java.lang.IllegalArgumentException
- Implementing methodName for scanHex.
scanOct
private long scanOct(ScanfFormat fmt, int width) throws java.io.IOException, java.lang.IllegalArgumentException
- Implementing methodName for scanOct.
skipWhiteSpace
private boolean skipWhiteSpace()
throws java.io.IOException
- Skip white spacew and count line numbers.
skipWhiteSpace
private int skipWhiteSpace(int limit)
throws java.io.IOException
- Skip white spacew and count line numbers.
|
|||||||||
| Home >> All >> [ cformat overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
JAVADOC