Προσπαθώ να βρω έναν τρόπο να λαμβάνω μια είσοδο "char" από το πληκτρολόγιο.
Δοκίμασα να χρησιμοποιήσω:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Αυτή η μέθοδος δεν υπάρχει.
Προσπάθησα να πάρω το "c" ως "String". Ωστόσο, αυτό δεν θα λειτουργούσε πάντα σε κάθε περίπτωση, αφού η άλλη μέθοδος που καλώ από τη μέθοδό μου απαιτεί ένα char
ως είσοδο. Επομένως, πρέπει να βρω έναν τρόπο να λαμβάνω ρητά ένα char ως είσοδο.
Καμία βοήθεια;
Θα μπορούσατε να πάρετε τον πρώτο χαρακτήρα από το Scanner.next
:
char c = reader.next().charAt(0);
Για να καταναλώσετε ακριβώς έναν χαρακτήρα θα μπορούσατε να χρησιμοποιήσετε:
char c = reader.findInLine(".").charAt(0);
Για να καταναλώσετε ακριβώς έναν χαρακτήρα θα μπορούσατε να χρησιμοποιήσετε:
char c = reader.next(".").charAt(0);
Δεν υπάρχει μέθοδος API για να λάβετε έναν χαρακτήρα από τον σαρωτή. Θα πρέπει να λάβετε το αλφαριθμητικό χρησιμοποιώντας την scanner.next()
και να καλέσετε τη μέθοδο String.charAt(0)
στο επιστρεφόμενο αλφαριθμητικό.
Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);
Για να είστε σίγουροι για τα λευκά κενά, θα μπορούσατε επίσης να καλέσετε πρώτα την trim()
στο αλφαριθμητικό για να αφαιρέσετε τυχόν λευκά κενά.
Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
Υπάρχουν τρεις τρόποι προσέγγισης του προβλήματος αυτού:
Αν θέλετε να διαβάσετε το υπόλοιπο της γραμμής ως χαρακτήρες, κάντε επανάληψη στους υπόλοιπους χαρακτήρες του String. Άλλες απαντήσεις έχουν αυτόν τον κώδικα.
Χρησιμοποιήστε setDelimiter("")
για να ορίσετε το διαχωριστικό σε κενό αλφαριθμητικό. Αυτό θα αναγκάσει την next()
να κάνει tokenize σε συμβολοσειρές που έχουν μήκος ακριβώς έναν χαρακτήρα. Έτσι, στη συνέχεια, μπορείτε να καλέσετε επαναλαμβανόμενα την next().charAt(0)
για να επαναλάβετε τους χαρακτήρες. Στη συνέχεια μπορείτε να ορίσετε τον διαχωριστή στην αρχική του τιμή και να συνεχίσετε τη σάρωση με τον κανονικό τρόπο!
Χρησιμοποιήστε το API αναγνώστη αντί για το API σαρωτή. Η μέθοδος Reader.read()
παραδίδει έναν μεμονωμένο χαρακτήρα που διαβάζεται από τη ροή εισόδου. Για παράδειγμα:
Reader reader = new InputStreamReader(System.in),
int ch = reader.read(),
if (ch != -1) { // έλεγχος για EOF
// έχουμε έναν χαρακτήρα ...
}
Όταν διαβάζετε από την κονσόλα μέσω του System.in
, η είσοδος τυπικά αποθηκεύεται από το λειτουργικό σύστημα, και μόνο όταν ο χρήστης πληκτρολογήσει ENTER "απελευθερώνεται" στην εφαρμογή. Έτσι, αν σκοπεύετε η εφαρμογή σας να ανταποκρίνεται σε μεμονωμένα πλήκτρα του πληκτρολογίου, αυτό δεν πρόκειται να λειτουργήσει. Θα πρέπει να κάνετε κάποια ειδικά για το λειτουργικό σύστημα πράγματα σε εγγενή κώδικα για να απενεργοποιήσετε ή να παρακάμψετε την προσωρινή αποθήκευση γραμμών για την κονσόλα σε επίπεδο λειτουργικού συστήματος.
Αναφορά: