Scanner class

advertisement
Scanner class
Evan Korth
NYU
Evan Korth
Java 1.5 (5.0)’s Scanner class
• Prior to Java 1.5 getting input from the console
involved multiple steps.
• Java 1.5 introduced the Scanner class which
simplifies console input. It can also be used to
read from files and Strings (among other
sources).
• It also can be used for powerful pattern matching
– we will not cover pattern matching in this class.
• Scanner is in the Java.util package. So you must:
import java.util.Scanner;
Evan Korth
Creating Scanner objects
• We can create a Scanner object by invoking several
different constructors.
– Scanner(File source)
Constructs a new Scanner that produces values scanned
from the specified file.
– Scanner(InputStream source)
Constructs a new Scanner that produces values scanned
from the specified input stream.
– Scanner(Readable source)
Constructs a new Scanner that produces values scanned
from the specified source.
– Scanner(String source)
Constructs a new Scanner that produces values scanned
from the specified string.
I have included 4 of the 8 constructors provided by the API – Source java.sun.com
Evan Korth
Terminology
• Token: In computing, a token is a categorized block of
text, usually consisting of indivisible characters known as
lexemes. A token can look like anything: English,
gibberish symbols, anything; it just needs to be a useful
part of the structured text.
• Delimiter: A delimiter is a character used to separate
items of data stored on a computer. It is used to tell
computers to finish processing one piece of data and
move on to the next one. Most delimiters are characters
that will not be used in the data, such as spaces or
commas. It must also be consistent throughout the data.
Source: wikipedia
Evan Korth
Scanner class
• The Scanner class basically parses input
from the source into tokens by using
delimiters to identify the token boundaries.
• The default delimiter is whitespace:
– [ \t\n\x0B\f\r]
Evan Korth
System’s static fields
• static PrintStream err
The "standard" error output stream.
• static InputStream in
The "standard" input stream.
• static PrintStream out
The "standard" output stream.
• Remember: You have been using System.out
since your first “Hello World” program.
• Now we see System.in is an InputStream
Evan Korth
Scanner
• Scanner will read a line of input from its source
(our examples will be from System.in but we
have already seen other sources are possible)
• Example:
Scanner sc = new Scanner (System.in);
int i = sc.nextInt();
System.out.println("You entered" + i);
• This example reads a single int from System.in and
outputs it to System.out. It does not check that the user
actually entered an int.
Evan Korth
Next Methods
String next()
Finds and returns the next complete token from this scanner.
boolean nextBoolean()
Scans the next token of the input into a boolean value and returns that
value.
byte nextByte()
Scans the next token of the input as a byte.
double nextDouble()
Scans the next token of the input as a double.
float nextFloat()
Scans the next token of the input as a float.
int nextInt()
Scans the next token of the input as an int.
String nextLine()
Advances this scanner past the current line and returns the input that was
skipped.
long nextLong()
Scans the next token of the input as a long.
short nextShort()
Scans the next token of the input as a short.
Evan Korth
InputMismatchExceptions
• InputMismatchException: This exception
can be thrown if you try to get the next
token using a next method that does not
match the type of the token
Evan Korth
hasNext methods
boolean hasNext()
Returns true if this scanner has another token in its input.
boolean hasNextBoolean()
Returns true if the next token in this scanner's input can be interpreted as a boolean value
using a case insensitive pattern created from the string "true|false".
boolean hasNextByte()
Returns true if the next token in this scanner's input can be interpreted as a byte value in
the default radix using the nextByte() method.
boolean hasNextDouble()
Returns true if the next token in this scanner's input can be interpreted as a double value
using the nextDouble() method.
boolean hasNextFloat()
Returns true if the next token in this scanner's input can be interpreted as a float value
using the nextFloat() method.
boolean hasNextInt()
Returns true if the next token in this scanner's input can be interpreted as an int value in the
default radix using the nextInt() method.
BooleanhasNextLine()
Returns true if there is another line in the input of this scanner.
boolean hasNextLong()
Returns true if the next token in this scanner's input can be interpreted as a long value in
the default radix using the nextLong() method.
boolean hasNextShort()
Returns true if the next token in this scanner's input can be interpreted as a short value in
the default radix using the nextShort() method.
Evan Korth
Another example
Scanner sc = new Scanner (System.in);
System.out.print ("Enter first int: ");
while (sc.hasNextInt())
{
int i = sc.nextInt();
System.out.println("You entered " + i);
System.out.print ("Enter another int: ");
}
Evan Korth
Scanner
• The Scanner class has more powerful
abilities. For example, you can:
– Change the delimiters
– Use regular expressions
– Read input in different radixes (radices or
bases)
Evan Korth
Download