Πώς να χρησιμοποιήσετε το σαρωτή στην Java

How Use Scanner Java



Ο σαρωτής σε Java είναι μια κλάση στο πακέτο java.util. Αυτή η τάξη στοχεύει στην ανάγνωση εισόδου από μια συμβολοσειρά, το πληκτρολόγιο, το αρχείο ή την υποδοχή δικτύου. Αυτό το άρθρο επικεντρώνεται μόνο στην ανάγνωση της εισόδου από το πληκτρολόγιο και την εμφάνιση του αποτελέσματος στο παράθυρο του τερματικού. Παρόμοιες ιδέες μπορούν να χρησιμοποιηθούν για την ανάγνωση εισόδου από το αρχείο ή το κανάλι δικτύου. Ο σαρωτής δεν εκτυπώνεται στο παράθυρο τερματικού. Για να εκτυπώσετε στο τερματικό, χρησιμοποιήστε το αντικείμενο System.out. Είναι απλό να χρησιμοποιήσετε αυτό το αντικείμενο για εκτύπωση στο τερματικό, όπως φαίνεται παρακάτω.

Για να χρησιμοποιήσετε την κλάση σαρωτή, πρέπει πρώτα να εισαχθεί. Μετά από αυτό, ένα αντικείμενο πρέπει να προταθεί από αυτό. Μετά τη χρήση του αντικειμένου σαρωτή, πρέπει να κλείσει. Το αντικείμενο ροής εισόδου που αντιπροσωπεύει το πληκτρολόγιο είναι System.in. Ο σαρωτής έχει πολλές μεθόδους. Μόνο τα κοινά χρησιμοποιούμενα θα εξηγηθούν σε αυτό το άρθρο.







Περιεχόμενο άρθρου



Απλή χρήση της κατηγορίας σαρωτή

Ο ακόλουθος κώδικας ζητά από το χρήστη να πληκτρολογήσει μια πρόταση και στη συνέχεια εμφανίζει την πρόταση:



εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?
Σύστημα ΤοέξωΤοεκτύπωση('Πληκτρολογήστε μια πρόταση και πατήστε Enter:')?

Σειρά πρόταση=scanObj.nextLine()?
Σύστημα ΤοέξωΤοεκτύπωση(πρόταση)?

scanObj.Κλείσε()?
}
}

Η πρώτη γραμμή εισάγει την κλάση σαρωτή. Στην κύρια λειτουργία, η πρώτη γραμμή δημιουργεί ένα αντικείμενο σαρωτή χρησιμοποιώντας το αντικείμενο System.in για το πληκτρολόγιο. Μόλις δημιουργηθεί το αντικείμενο του σαρωτή, αρχίζει να περιμένει την είσοδο. Η επόμενη γραμμή εκτυπώνει μια δήλωση, ζητώντας από τον χρήστη να πληκτρολογήσει μια πρόταση. Η γραμμή που ακολουθεί στον κώδικα χρησιμοποιεί τη μέθοδο nextLine () του αντικειμένου του σαρωτή για να διαβάσει την πρόταση του χρήστη αφού πατήσει Enter. Η γραμμή μετά, στον κώδικα, εκτυπώνει ξανά την πρόταση στο παράθυρο του τερματικού. Η τελευταία γραμμή κλείνει το αντικείμενο του σαρωτή.





Χωρισμός γραμμής εισόδου σε τιμές

Ο ακόλουθος κώδικας χωρίζει τη γραμμή εισαγωγής σε λέξεις (μάρκες), χρησιμοποιώντας το διάστημα ως οριοθέτη:

εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?
Σύστημα ΤοέξωΤοεκτύπωση('Πληκτρολογήστε μια γραμμή μάρκες και πατήστε Enter:')?

ενώ(scanObj.έχειΕπόμενο()){
Σύστημα ΤοέξωΤοεκτύπωση(scanObj.Επόμενο())?
}

scanObj.Κλείσε()?
}
}

Το hasNext () και το επόμενο () είναι δύο άλλες μέθοδοι του αντικειμένου του σαρωτή. Όταν το αντικείμενο του σαρωτή διαβάζει μια γραμμή, τη διατηρεί. next () αποκτά πρόσβαση στο επόμενο διακριτικό (λέξη). Το hasNext () επιστρέφει true αν υπάρχει κάποιο άλλο διακριτικό που δεν έχει ακόμη προσπελαστεί.



Δυστυχώς, ο χρήστης αναμένεται ακόμη να πληκτρολογήσει εισαγωγή για διαχωρισμό και επανεμφάνιση με αυτόν τον κωδικό. Για να τερματίσετε όλα αυτά, πατήστε Ctrl+z και θα πρέπει να επιστρέψετε στη γραμμή εντολών.

Στον παραπάνω κώδικα, ο οριοθέτης διαχωρίζει τις μάρκες στο χώρο. Ένας άλλος χαρακτήρας μπορεί να χρησιμοποιηθεί. Ο παρακάτω κώδικας χρησιμοποιεί το κόμμα. Μην ξεχάσετε να πατήσετε Ctrl+z για να τερματίσετε τον βρόχο εάν δοκιμάσετε τον κώδικα.

εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?
Σύστημα ΤοέξωΤοεκτύπωση('Πληκτρολογήστε μια γραμμή μάρκες και πατήστε Enter:')?

scanObj.useDelimiter(',')?

ενώ(scanObj.έχειΕπόμενο()){
Σύστημα ΤοέξωΤοεκτύπωση(scanObj.Επόμενο())?
}

scanObj.Κλείσε()?
}
}

Εάν δοκιμάσατε τον κώδικα, θα είχατε παρατηρήσει ότι τα κενά σε μάρκες έχουν συμπεριληφθεί ως μέρος των διακριτικών (έξοδος). Η έκφραση, scanObj.useDelimiter (,); πληκτρολογείται μετά την ανάγνωση της γραμμής εισόδου. είναι αυτό που κάνει το κόμμα, το οριοθετητή.

Ανάγνωση και επικύρωση πρωτόγονων τύπων δεδομένων

nextBoolean () μέθοδος

Στον ακόλουθο κώδικα, ο χρήστης αναμένεται να πληκτρολογήσει είτε true είτε false χωρίς τα εισαγωγικά και στη συνέχεια να πατήσει το πλήκτρο Enter αν ο χρήστης πληκτρολογήσει οτιδήποτε άλλο, όπως ναι ή όχι, θα εμφανιστεί ένα μήνυμα σφάλματος.

εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σύστημα ΤοέξωΤοΤυπώνω(«Είστε άνω των 24 ετών; ')?
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?

booleanbl=scanObj.nextBoolean()?
αν (bl== αληθής) {
Σύστημα ΤοέξωΤοεκτύπωση('Είστε άνω των 24')?
}
αλλού αν (bl== ψευδής) {
Σύστημα ΤοέξωΤοεκτύπωση(«Είστε κάτω των 24 ετών»)?
}

scanObj.Κλείσε()?
}
}

Δεδομένου ότι η java θα εκδώσει ένα μήνυμα σφάλματος εφόσον η εισαγωγή δεν είναι σωστή ή λανθασμένη, το else αν έχει χρησιμοποιηθεί αντί για άλλο.

Η διαφορά μεταξύ των μεθόδων, print και println, είναι ότι η εκτύπωση αναμένει την είσοδο στην τρέχουσα γραμμή, ενώ η println αναμένει την είσοδο στην επόμενη γραμμή.

μέθοδος nextByte ()

Με το σύνολο χαρακτήρων ASCII, ένας χαρακτήρας είναι ένα byte. Ωστόσο, με ορισμένα σύνολα ανατολικών χαρακτήρων, ένας χαρακτήρας μπορεί να αποτελείται από περισσότερα από ένα byte. Ανεξάρτητα από το σύνολο χαρακτήρων, η μέθοδος nextByte διαβάζει και επικυρώνει το επόμενο byte της εισόδου. Ο ακόλουθος κώδικας μπορεί να χρησιμοποιηθεί για το σκοπό αυτό:

εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σύστημα ΤοέξωΤοΤυπώνω(«Τύπος αριθμού<128, press Enter: ')?
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?

ψηφιόλεξηbt=scanObj.nextByte()?
Σύστημα ΤοέξωΤοεκτύπωση(bt)?

scanObj.Κλείσε()?
}
}

Εάν για αυτόν τον κωδικό εισαχθεί αριθμός μεγαλύτερος από 127 ή χαρακτήρας αλφαβήτου, θα εκδοθεί μήνυμα σφάλματος.

μέθοδος nextInt ()

Το επόμενο ακέραιο διακριτικό ως είσοδος μπορεί επίσης να επικυρωθεί και να γίνει αποδεκτό. Ο παρακάτω κωδικός μπορεί να χρησιμοποιηθεί:

εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σύστημα ΤοέξωΤοΤυπώνω('Εισαγάγετε οποιονδήποτε ακέραιο αριθμό:')?
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?

intσε ένα=scanObj.επόμενοInt()?
Σύστημα ΤοέξωΤοεκτύπωση(σε ένα)?

scanObj.Κλείσε()?
}
}

Οι κεντρικοί ή πίσω χώροι έχουν αφαιρεθεί. Για αυτόν τον κωδικό, οποιαδήποτε ακέραιη τιμή, συμπεριλαμβανομένων των τιμών μεγαλύτερων από 127, θα ήταν αποδεκτή. Με αυτές τις μεθόδους nextXXX (), μόλις αποτύχει η επικύρωση, εκδίδεται μήνυμα σφάλματος.

μέθοδος nextBigInteger ()

Φαίνεται ότι οι μηχανικοί λογισμικού δεν θα σταματήσουν ποτέ να έρχονται με νέα πράγματα. Ένας μεγάλος ακέραιος είναι ένας ακέραιος του οποίου η τιμή είναι πολύ μεγαλύτερη από αυτή ενός ακέραιου. Ωστόσο, με την Java, μπορεί να διαβαστεί με τον ίδιο τρόπο όπως ο ακέραιος. Ο παρακάτω κώδικας το δείχνει αυτό:

εισαγωγή java.util.Scanner?
εισαγωγή java.math.BigInteger?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σύστημα ΤοέξωΤοεκτύπωση('Εισαγάγετε οποιονδήποτε ακέραιο για μεγάλο ακέραιο:')?
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?

BigInteger σε ένα=scanObj.nextBigInteger()?
Σύστημα ΤοέξωΤοεκτύπωση(σε ένα)?

scanObj.Κλείσε()?
}
}

Σημειώστε τη δήλωση εισαγωγής, εισαγάγετε java.math.BigInteger ;. Επίσης, σημειώστε ότι ο μεγάλος ακέραιος τύπος ξεκινά με κεφαλαίο Β και όχι με πεζά β.

μέθοδος nextFloat ()

Το επόμενο διακριτικό float ως είσοδος μπορεί επίσης να επικυρωθεί και να γίνει αποδεκτό. Ο παρακάτω κωδικός μπορεί να χρησιμοποιηθεί:

εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σύστημα ΤοέξωΤοΤυπώνω('Εισαγάγετε οποιοδήποτε Float:')?
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?

φλοτέρσε ένα=scanObj.nextFloat()?
Σύστημα ΤοέξωΤοεκτύπωση(σε ένα)?

scanObj.Κλείσε()?
}
}

Ένα παράδειγμα ενός αριθμού πλωτήρα είναι 23.456. Οι κεντρικοί ή πίσω χώροι έχουν αφαιρεθεί.

nextDouble ()

Το επόμενο διπλό διακριτικό ως είσοδος μπορεί επίσης να επικυρωθεί και να γίνει αποδεκτό. Ο παρακάτω κωδικός μπορεί να χρησιμοποιηθεί:

εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σύστημα ΤοέξωΤοΤυπώνω('Εισαγάγετε οποιοδήποτε διπλό:')?
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?

διπλόσε ένα=scanObj.nextDouble()?
Σύστημα ΤοέξωΤοεκτύπωση(σε ένα)?

scanObj.Κλείσε()?
}
}

Ένα παράδειγμα διπλού αριθμού είναι 23.456. Ένας διπλός αριθμός διαφέρει από ένα float επειδή έχει μικρότερο περιθώριο σφάλματος. Οι κεντρικοί ή πίσω χώροι έχουν αφαιρεθεί.

μέθοδος nextLine ()

Η μέθοδος nextLine () είναι για μια συμβολοσειρά. Εάν η συμβολοσειρά είναι η γραμμή εισόδου από το πληκτρολόγιο μετά το πάτημα του Enter, μπορεί να έχει τον χαρακτήρα νέας γραμμής, ‘ n’. Ο παρακάτω κωδικός μπορεί να χρησιμοποιηθεί:

εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σύστημα ΤοέξωΤοεκτύπωση(«Εισαγάγετε μια γραμμή με\n: ')?
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?

Σειρά Π=scanObj.nextLine()?
Σύστημα ΤοέξωΤοεκτύπωση(Π)?

scanObj.Κλείσε()?
}
}

Παρατηρήστε ότι ο τύπος συμβολοσειράς ξεκινά με το κεφαλαίο S και όχι με το πεζάκι s.

Οι μέθοδοι nextLine (), hasNext () και next () έχουν χρησιμοποιηθεί προηγουμένως, σε αυτό το άρθρο. Ο σαρωτής έχει άλλες μεθόδους και άλλες πρωτόγονες μεθόδους δεδομένων - δείτε αργότερα.

Εκχώρηση εισόδου σε μια μεταβλητή

Η εισαγωγή μπορεί να εκχωρηθεί σε μια μεταβλητή, όπως δείχνει ο ακόλουθος κώδικας:

εισαγωγή java.util.Scanner?

δημόσιο τάξηΗ τάξη{
δημόσιο στατικός κενόςκύριος( Σειρά []αψίδες) {
Σαρωτής scanObj= νέοςΕρευνητής( Σύστημα Τοσε)?

Σύστημα ΤοέξωΤοΤυπώνω('Εισαγάγετε όνομα:')?
Σειρά όνομα=scanObj.nextLine()?

Σύστημα ΤοέξωΤοΤυπώνω('Εισαγωγή ηλικίας:')?
intηλικία=scanObj.επόμενοInt()?

Σύστημα ΤοέξωΤοΤυπώνω('Εισαγάγετε μισθό:')?
διπλόΜισθός=scanObj.nextDouble()?

Σύστημα ΤοέξωΤοεκτύπωση('Ονομα: ' +όνομα+ ', Ηλικία:' +ηλικία+ ', Μισθός: ' +Μισθός)?

scanObj.Κλείσε()?
}
}

συμπέρασμα

Ο σαρωτής σε Java είναι μια κλάση στο πακέτο java.util. Αυτή η τάξη στοχεύει στην ανάγνωση εισόδου από μια συμβολοσειρά, το πληκτρολόγιο, το αρχείο ή την υποδοχή δικτύου. Αυτό το άρθρο έχει επικεντρωθεί κυρίως στην ανάγνωση εισόδου από το πληκτρολόγιο και την εμφάνιση του αποτελέσματος στο παράθυρο του τερματικού. Παρόμοιες ιδέες μπορούν να χρησιμοποιηθούν για την ανάγνωση εισόδου από τη συμβολοσειρά, το αρχείο ή το κανάλι δικτύου.

Για να διαβάσετε ολόκληρη τη γραμμή εισαγωγής πληκτρολογίου, χρησιμοποιήστε τη μέθοδο nextLine (). Η γραμμή ως συμβολοσειρά μπορεί να χωριστεί σε μάρκες, χρησιμοποιώντας τις μεθόδους hasNext () και next () και τον βρόχο while. Ο προεπιλεγμένος οριοθέτης για το διαχωρισμό είναι ο χώρος, αλλά ο προγραμματιστής μπορεί να επιλέξει κάποιο άλλο όριο. Μην ξεχάσετε να κάνετε Ctrl+z για να σταματήσετε τον βρόχο while, εάν είναι απαραίτητο. Η αφαίρεση των κεντρικών και πίσω χώρων μπορεί να γίνει χρησιμοποιώντας άλλα σχήματα που δεν αναφέρονται σε αυτό το άρθρο. Η επικύρωση των μαρκών μπορεί επίσης να γίνει χρησιμοποιώντας άλλα σχήματα που δεν αναφέρονται σε αυτό το άρθρο.

Οι πρωτόγονες τιμές μπορούν να διαβαστούν χρησιμοποιώντας nextBoolean (), nextByte (), nextInt (), κλπ. Αυτές οι μέθοδοι nextXXX () κάνουν επικύρωση και αφαιρούν επίσης κενά και κενά διαστήματα.

Ο σαρωτής Java έχει πολλές περισσότερες μεθόδους. Ωστόσο, η βασική χρήση του σαρωτή έχει εξηγηθεί σε αυτό το άρθρο. Η επιλογή ενός διακριτικού στην πραγματικότητα γίνεται χρησιμοποιώντας κανονικές τεχνικές έκφρασης. Η χρήση κανονικών τεχνικών έκφρασης είναι συζήτηση, για κάποια άλλη φορά.