Saya mencoba mencari cara untuk menerima char
masukan dari keyboard.
Saya mencoba menggunakan:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Metode ini tidak ada.
Saya mencoba mengambil c
sebagai String
. Namun, itu tidak selalu berhasil dalam setiap kasus, karena metode lain yang saya panggil dari metode saya memerlukan a char
sebagai masukan. Oleh karena itu saya harus menemukan cara untuk secara eksplisit mengambil karakter sebagai masukan.
Ada bantuan?
java
input
char
java.util.scanner
Muntah
sumber
sumber
char c = reader.next("[a-zA-Z]").charAt(0);
Siapkan pemindai:
Setelah ini
reader.next()
akan mengembalikan string satu karakter.sumber
Tidak ada metode API untuk mendapatkan karakter dari Scanner. Anda harus mendapatkan String menggunakan
scanner.next()
dan memanggilString.charAt(0)
metode pada String yang dikembalikan.Untuk amannya dengan spasi, Anda juga dapat memanggil
trim()
string terlebih dahulu untuk menghapus spasi putih.sumber
reader.next()
sudah memberi Anda string mulai dari karakter non-putih pertama?Ada tiga cara untuk mengatasi masalah ini:
Panggil
next()
Pemindai, dan ekstrak karakter pertama dari String (mis.charAt(0)
) Jika Anda ingin membaca sisa baris sebagai karakter, ulangi karakter yang tersisa dalam String. Jawaban lain memiliki kode ini.Gunakan
setDelimiter("")
untuk menyetel pemisah menjadi string kosong. Ini akan menyebabkannext()
tokenisasi menjadi string yang panjangnya persis satu karakter. Jadi Anda dapat berulang kali memanggilnext().charAt(0)
untuk mengulang karakter. Anda kemudian dapat menyetel pembatas ke nilai aslinya dan melanjutkan pemindaian dengan cara biasa!Gunakan API Pembaca, bukan API Pemindai. The
Reader.read()
Metode memberikan satu karakter dibaca dari input stream. Sebagai contoh:Saat Anda membaca dari konsol melalui
System.in
, input biasanya di-buffer oleh sistem operasi, dan hanya "dilepaskan" ke aplikasi saat pengguna mengetik ENTER. Jadi, jika Anda bermaksud agar aplikasi Anda merespons setiap ketikan keyboard, ini tidak akan berhasil. Anda perlu melakukan beberapa kode asli khusus OS untuk menonaktifkan atau mengatasi buffering baris untuk konsol di tingkat OS.Referensi:
sumber
Anda dapat mengatasi masalah ini, "mengambil input keyboard satu karakter pada satu waktu" dengan sangat mudah. Tanpa harus menggunakan Scanner semua dan juga tidak menghapus buffer input sebagai efek sampingnya, dengan menggunakan ini.
Jika semua yang Anda butuhkan adalah fungsionalitas yang sama dengan fungsi bahasa C "getChar ()" maka ini akan bekerja dengan baik. Keuntungan besar dari "System.in.read ()" adalah buffer tidak dihapus setelah setiap karakter Anda ambil. Jadi, jika Anda masih membutuhkan semua input pengguna, Anda masih bisa mendapatkan sisanya dari buffer input. The
"char c = scanner.next().charAt(0);"
cara melakukan ambil char tapi akan menghapus penyangga.Semoga bermanfaat, dan semoga berhasil! PS Maaf saya tahu ini adalah posting lama, tapi saya berharap jawaban saya membawa wawasan baru dan dapat membantu orang lain yang juga mengalami masalah ini.
sumber
Ini sebenarnya tidak berhasil:
Ada beberapa penjelasan dan referensi yang bagus dalam pertanyaan ini: Mengapa kelas Scanner tidak memiliki metode nextChar? "Pemindai memecah masukannya menjadi token menggunakan pola pembatas", yang cukup terbuka. Misalnya saat menggunakan ini
untuk baris masukan ini "(1 + 9) / (3 - 1) + 6 - 2" panggilan ke pengembalian berikutnya "(1", c akan disetel ke '(', dan Anda akan kehilangan ' 1 'pada panggilan berikutnya ke berikutnya ()
Biasanya ketika Anda ingin mendapatkan karakter, Anda ingin mengabaikan spasi. Ini berhasil untuk saya:
Referensi: regex untuk mencocokkan karakter tunggal yang tidak lain adalah spasi
sumber
"[^\\s]" === "\\S"
Cara terbaik untuk menerima input karakter di kelas Scanner adalah:
sumber
sumber
Coba ini: char c = S.nextLine (). CharAt (0);
sumber
Anda harus menggunakan pembaca masukan kustom Anda untuk hasil yang lebih cepat daripada mengekstrak karakter pertama dari membaca String. Tautan untuk Custom ScanReader dan penjelasannya: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
Kode untuk memindai Char:
sumber
Ada dua pendekatan, Anda dapat mengambil tepat satu karakter atau ketat satu karakter. Saat Anda menggunakan persis, pembaca hanya akan mengambil karakter pertama, terlepas dari berapa banyak karakter yang Anda masukkan.
Sebagai contoh:
Ketika Anda memberikan sekumpulan karakter sebagai masukan, katakan "abcd", pembaca hanya akan mempertimbangkan karakter pertama yaitu, huruf 'a'
Tetapi ketika Anda menggunakan secara ketat, masukan harus hanya satu karakter. Jika masukan lebih dari satu karakter, maka pembaca tidak akan mengambil masukan tersebut
Misalkan Anda memberi input "abcd", tidak ada input yang diambil, dan variabel c akan memiliki nilai Null.
sumber
Untuk mendapatkan hanya satu karakter char c = reader.next ("."). CharAt (0);
sumber
sumber
Anda harus mendapatkan String menggunakan scanner.next () dan memanggil metode String.charAt (0) pada String yang dikembalikan.
Contoh:
keluaran
sumber
Anda hanya perlu menulis ini untuk mendapatkan nilai dalam tipe karakter.
sumber
sumber
Coba ini
sumber
Omong-omong, Anda tidak bisa mengambil karakter secara langsung sebagai masukan. Seperti yang Anda lihat di atas, pertama-tama String diambil kemudian charAt (0); ditemukan dan disimpan
sumber
Gunakan saja ...
Ini mendapatkan karakter pertama dari input berikutnya.
sumber
Anda bisa menggunakan typecasting:
Dengan cara ini Anda akan mengambil input dalam String karena fungsi 'next ()' tetapi kemudian akan diubah menjadi karakter karena 'char' yang disebutkan dalam tanda kurung.
Metode konversi tipe data dengan menyebutkan tipe data tujuan dalam tanda kurung disebut typecating. Ini berhasil untuk saya, saya harap ini berhasil untuk Anda :)
sumber
String
ke achar
.Untuk menemukan indeks karakter dalam sengatan tertentu, Anda dapat menggunakan kode ini:
sumber
Cara termudah adalah, pertama ubah variabel menjadi String dan terima input sebagai string. Kemudian Anda dapat mengontrol berdasarkan variabel input dengan pernyataan if-else atau switch sebagai berikut.
sumber