Download Iterators and File Input - Villanova Computer Science

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Iterators and File Input
CSC 1051 – Data Structures and Algorithms I
Dr. Mary-Angela Papalaskari
Department of Computing Sciences
Villanova University
Course website:
www.csc.villanova.edu/~map/1051/
Some slides in this presentation are adapted from the slides accompanying Java Software Solutions by Lewis & Loftus
CSC 1051 M.A. Papalaskari, Villanova University
Outline of Chapter 5
Boolean Expressions
The if Statement
Comparing Data
The while Statement
Iterators
The ArrayList Class
Determining Event Sources
Check Boxes and Radio Buttons
CSC 1051 M.A. Papalaskari, Villanova University
Iterators
•  Iterating: to process a collection of
items, one at a time
•  Typical iterator methods:
– hasNext() - returns true if there is at
least one more item to process
– next() returns the next item
CSC 1051 M.A. Papalaskari, Villanova University
Iterators
•  Several classes in the Java standard class library are
iterators
•  items to be processed are called tokens
–  Examples: words, numbers, components of a url…
•  The Scanner class is an iterator
–  the hasNext method returns true if there is more data to be
scanned
–  the next method returns the next scanned token as a string
•  The Scanner class also has variations on the hasNext
method for specific data types (such as hasNextInt)
CSC 1051 M.A. Papalaskari, Villanova University
Using Scanner to read from a file
•  Create a “file object”
File myFile = new File("sample.inp");
•  Create a Scanner to read from file object
Scanner fileScan = new Scanner (myFile);
•  Use next() to obtain next token
•  Use nextLine() to obtain entire line of text (until \n)
•  Use hasNext() to test whether you are done
CSC 1051 M.A. Papalaskari, Villanova University
File Input Example: FileInput.java
public class FileInput
{
//---------------------------------------------------------------// Reads text from a file and prints it in uppercase.
//---------------------------------------------------------------public static void main (String[] args) throws IOException
{
String line;
File myFile = new File("sample.inp");
Scanner fileScan = new Scanner (myFile));
// Read and process each line of the file
while (fileScan.hasNext())
{
line = fileScan.nextLine();
System.out.println (line.toUpperCase());
}
}
}
CSC 1051 M.A. Papalaskari, Villanova University
File Input Example
public class FileInput
{
//---------------------------------------------------------------sample.inp
// Reads text from a file and prints it in uppercase.
//---------------------------------------------------------------Computers
are useless. They can only give you answers.
public
static
void- main
Pablo Picasso (1881
1973)(String[] args) throws IOException
{
String line;
File myFile = new File("sample.inp");
Scanner fileScan = new Scanner (myFile));
// Read and process each line of the file
while (fileScan.hasNext())
{
line = fileScan.nextLine();
System.out.println (line.toUpperCase());
}
}
}
Run Output
COMPUTERS ARE USELESS. THEY CAN ONLY GIVE YOU ANSWERS.
PABLO PICASSO (1881 - 1973)
CSC 1051 M.A. Papalaskari, Villanova University
Try this: What gets printed?
sample1.inp
sample2.inp
//****************************************************************
// SomethingToDoWithFiles.java
Author: MAP
do
fa
//**************************************************************** re
sol
import java.util.Scanner;
mi
import java.io.*;
public class SomethingToDoWithFiles
{
public static void main (String[] args) throws IOException
{
String line1, line2;
Scanner fileScan1, fileScan2;
fileScan1 = new Scanner (new File("sample1.inp"));
fileScan2 = new Scanner (new File("sample2.inp"));
while (fileScan1.hasNext() && fileScan2.hasNext())
{
line1 = fileScan1.nextLine();
line2 = fileScan2.nextLine();
System.out.println (line1 + line2 + line1);
} System.out.println(fileScan1.hasNext()? "ping!": "pong!");
}
} CSC 1051 M.A. Papalaskari, Villanova University
Scanner – another example: reading
from a file AND from a String
•  Suppose we wanted to read and process a list of URLs (or other data
items) stored in a file
•  One scanner can be set up to read each line of the input until the end of
the file is encountered
•  Another scanner can be set up to process each line, i.e., separating the
components of each URL (at each occurrence of ‘/’)
•  Example:
URL: www.linux.org/info/gnu.html
This URL specifies a path consisting of the following components:
–  www.linux.org
–  info
–  gnu.html
•  See URLDissector.java
CSC 1051 M.A. Papalaskari, Villanova University
//********************************************************************
// URLDissector.java
Author: Lewis/Loftus
//
// Demonstrates the use of Scanner to read file input and parse it
// using alternative delimiters.
//********************************************************************
import java.util.Scanner;
import java.io.*;
public class URLDissector
{
//----------------------------------------------------------------// Reads urls from a file and prints their path components.
//----------------------------------------------------------------public static void main (String[] args) throws IOException
{
String url;
Scanner fileScan, urlScan;
fileScan = new Scanner (new File("urls.inp"));
continue
CSC 1051 M.A. Papalaskari, Villanova University
continue
// Read and process each line of the file
while (fileScan.hasNext())
{
url = fileScan.nextLine();
System.out.println ("URL: " + url);
urlScan = new Scanner (url);
urlScan.useDelimiter("/");
default delimiter is white space,
we are changing this here
// Print each part of the url
while (urlScan.hasNext())
System.out.println ("
" + urlScan.next());
System.out.println();
}
}
}
CSC 1051 M.A. Papalaskari, Villanova University
Sample Run
continue
URL: www.google.com
www.google.com
// Read and process each line of the file
URL: www.linux.org/info/gnu.html
while (fileScan.hasNext())
www.linux.org
{
url = fileScan.nextLine();
info
System.out.println
gnu.html ("URL: " + url);
urlScan = new Scanner (url);
URL: thelyric.com/calendar/
urlScan.useDelimiter("/");
thelyric.com
calendar
Print
each part of the url
//
while (urlScan.hasNext())
System.out.println
("
" + urlScan.next());
URL: www.cs.vt.edu/undergraduate/about
www.cs.vt.edu
}
}
}
System.out.println();
undergraduate
about
URL: youtube.com/watch?v=EHCRimwRGLs
youtube.com
watch?v=EHCRimwRGLs
CSC 1051 M.A. Papalaskari, Villanova University
Another Example –
Input validation (Interactive input)
What if input is not a number?
System.out.print ("Enter the quantity: ");
quantity = scan.nextInt();
CSC 1051 M.A. Papalaskari, Villanova University
Example – What if input is not an int?
System.out.print ("Enter the quantity: ");
// wrong kind of input?
quantity = scan.nextInt();
CSC 1051 M.A. Papalaskari, Villanova University
Example – What if input is not an int?
System.out.print ("Enter the quantity: ");
// wrong kind of input?
while (!scan.hasNextInt()) // wrong kind of input?
{
// first scan the wrong input to get rid of it
String rong = scan.next();
System.out.print(”Try again. Enter the quantity:");
}
// we have an integer now, so go ahead, scan it!
quantity = scan.nextInt();
CSC 1051 M.A. Papalaskari, Villanova University