Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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 • 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 Example – What if input is not an int? 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: "); 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:"); } // now we know we have an integer, so scan it quantity = scan.nextInt(); CSC 1051 M.A. Papalaskari, Villanova University Example – What if input is negative? do { System.out.print ("Enter the quantity: "); 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:"); } // now we know we have an integer, so scan it quantity = scan.nextInt(); } while (quantity <0); // try again if quantity is negative 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 Iterators • The fact that a Scanner is an iterator is particularly helpful when reading input from a file • Suppose we wanted to read and process a list of URLs 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 for each URL to process each part of the path • 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("/"); // 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 Homework • Review Section 5.5 – Always do all self-review exercises when you review Some slides in this presentation are adapted from the slides accompanying Java Software Solutions by Lewis & Loftus CSC 1051 M.A. Papalaskari, Villanova University