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 • 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