User Tools

Site Tools


java:util_scanner_class

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:util_scanner_class [2020/03/05 12:30] – [Διαβάζοντας γραμμή-γραμμή] gthanosjava:util_scanner_class [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 35: Line 35:
 </code> </code>
  
-===== Διαβάζοντας γραμμή-γραμμή ===== +Η Java παρέχει την επιπλέον δυνατότητα να διαβάζετε συγκεκριμένους τύπους δεδομένων μέσω της κλάσης [[http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html|java.util.Scanner]]. Η κλάση Scanner επιτρέπει το διάβασμα από μία ροή χαρακτήρων γραμμή-γραμμή ή λέξη-λέξη. Όταν διαβάζετε λέξη-λέξη παρέχεται επιπλέον η δυνατότητα μετατροπής της πληροφορίας σε //primitive// τύπους δεδομένων όπως byte, short, int, longfloat, double κ.α.
- +
-Ό πιο απλός τρόπος ανάγνωσης αρχείων κειμένου είναι το διάβασμα κάθε γραμμής ξεχωριστά και στη συνέχει η επεξεργασία της γραμμής, ώστε να εξάγουμε τα αποτελέσματα που θέλουμε. Προκειμένου να επιτύχετε το διάβασμα ενός αρχείου γραμμή-γραμμή μπορείτε να το κάνετε με χρήση της κλάσης [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html|java.io.BufferedReader]], όπως φαίνεται παρακάτω: +
- +
-<code java ReadLineByLine.java> +
-import java.io.*; +
- +
-public class ReadLineByLine { +
-  public static void main(String []args) { +
-    try { +
-      String input, filename = "telephone-list.txt"; +
-      int i=0; +
-      TelephoneNumber [] numbers = new TelephoneNumber[5]; +
-      BufferedReader in = new BufferedReader(new FileReader(filename)); +
-      while( (input = in.readLine()) != null && input.length() > 0 ) { +
-        numbers[i++] = createTelephoneNumber(input); +
-      } +
-      System.out.println("-------- Telephone Numbers ---------"); +
-      for(TelephoneNumber number : numbers) { +
-        System.out.println(number); +
-      } +
-    } catch( IOException ex ) { +
-      ex.printStackTrace(); +
-    } +
-  } +
-   +
-  public static TelephoneNumber createTelephoneNumber(String inputLine) { +
-    String []tokens = inputLine.split("[\\s]+"); +
-    String name = tokens[0].trim() + " " + tokens[1].trim();  +
-    long number = Long.parseLong(tokens[2].trim()); +
-    TelephoneNumber t = new TelephoneNumber(name, number); +
-    return t; +
-  } +
-+
-</code> +
- +
-===== Χρησιμοποιώντας την κλάση Scanner ===== +
- +
-Εκτός από την δυνατότητα που έχετε να διαβάζετε γραμμή-γραμμή η Java σας δίνει την επιπλέον δυνατότητα να διαβάζετε συγκεκριμένους τύπους δεδομένων μέσω της κλάσης [[http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html|java.util.Scanner]]. Η κλάση Scanner σας δίνει την δυνατότητα να διαβάζετε από ένα αρχείο ή από την κονσόλα τα δεδομένα σας είτε ως //primitive// τύπους δεδομένων (int, bytelong, double κλπ), είτε ως StringΕπίσης σας δίνει την δυνατότητα να διαβάσετε μία ολόκληρη γραμμή, όπως κάνατε και με χρήση της κλάσης [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html|java.io.BufferedReader]].+
  
 Οι μέθοδοι της κλάσης //Scanner// έχουν συνοπτικά ως εξής: Οι μέθοδοι της κλάσης //Scanner// έχουν συνοπτικά ως εξής:
Line 96: Line 58:
  
 ==== Παράδειγμα ανάγνωσης με χρήση της Scanner ==== ==== Παράδειγμα ανάγνωσης με χρήση της Scanner ====
 +
 +Το παρακάτω παράδειγμα διαβάζει από ένα αρχείο ένα σύνολο εγγραφών και δημιουργεί ένα πίνακα αντικειμένων τύπου TelephoneNumber. Στη συνέχεια εκτυπώνει τα περιεχόμενα του πίνακα στην κονσόλα. 
  
 <code java ReadWithScanner.java> <code java ReadWithScanner.java>
-import java.util.Scanner; 
-import java.io.File; 
- 
 public class ReadWithScanner { public class ReadWithScanner {
   public static void main(String []args) {   public static void main(String []args) {
-    String firstname=null, lastname=null, number=null;+   
 +    TelephoneNumber[] numbers; 
 +    numbers = readTelephoneNumbers("telephone-list.txt"); 
 +    printTelephoneNumbers(numbers); 
 +  } 
 +   
 +  public static void printTelephoneNumbers(TelephoneNumber[] numbers) { 
 +    for(TelephoneNumber number : numbers) { 
 +      System.out.println(number); 
 +    } 
 +  } 
 +   
 +  public static TelephoneNumber[] readTelephoneNumbers(String filename) { 
 +    String firstname, lastname
 +     
 +    long number;
     int i=0;     int i=0;
     TelephoneNumber numbers[] = new TelephoneNumber[5];     TelephoneNumber numbers[] = new TelephoneNumber[5];
-    try +    try(Scanner sc = new Scanner(new File(filename))) {
-      Scanner sc = new Scanner(new File("telephone-list.txt"));+
              
       while( sc.hasNext() ) {               while( sc.hasNext() ) {        
         firstname = sc.next();         firstname = sc.next();
         lastname = sc.next();         lastname = sc.next();
-        number = sc.next(); +        number = sc.nextLong();
- +
-        if( lastname.charAt( lastname.length() -1 ) == ',' )  +
-          lastname = lastname.substring(0, lastname.length() -1);+
  
         numbers[i++] = new TelephoneNumber(firstname+" "+lastname, number);         numbers[i++] = new TelephoneNumber(firstname+" "+lastname, number);
       }       }
-    } catch(Exception ex) { +       
-      ex.printStackTrace(); +    } catch(InputMismatchException ex) { 
-    } +      System.out.println("Invalid file contents!"); 
-    for(TelephoneNumber telephoneNumber : numbers) { +    } catch(FileNotFoundException ex) { 
-      System.out.println(telephoneNumber);+      System.out.println("Unable to open '"+filename+"'");
     }     }
 +    
 +    return numbers;
   }   }
 +  
 } }
 </code> </code>
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
-Το παραπάνω παράδειγμα θα μπορούσατε να το εκτελέσετε διαβάζοντας από την κονσόλα, αντί να διαβάζετε από αρχείο προκειμένου να διαβάσετε από την κονσόλα θα μπορούσατε να αντικαταστήσετε την γραμμή+Το παραπάνω παράδειγμα θα μπορούσατε να το εκτελέσετε διαβάζοντας από το πληκτρολόγιο, αντί να διαβάζετε από αρχείο. Για να διαβάσετε από την κονσόλα θα μπορούσατε να αντικαταστήσετε τη γραμμή
 <code java> <code java>
-Scanner sc = new Scanner(new File("telephone-list.txt"));+Scanner sc = new Scanner(new File("telephone-list.txt"))
 </code> </code>
  
Line 138: Line 113:
  
 <code java> <code java>
-Scanner sc = new Scanner(System.in);+Scanner sc = new Scanner(System.in)
 </code> </code>
 </WRAP> </WRAP>
  
  
-| Προηγούμενο: [[:java:class_file | Η κλάση File ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:formatting | Μορφοποίηση Εξόδου ]] |+| Προηγούμενο: [[:java:class_file | Η κλάση File ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:formatting | Εγγραφή σε αρχεία κειμένου και μορφοποίηση εξόδου ]] |
java/util_scanner_class.1583411406.txt.gz · Last modified: 2020/03/05 12:30 by gthanos