Mengambil char input dari Scanner

Saya mencoba untuk menemukan cara untuk mengambil char input dari keyboard.

Saya mencoba menggunakan:

Scanner reader = new Scanner(System.in);
char c = reader.nextChar();

Metode ini doesn't ada.

Saya mencoba mengambil c sebagai String. Namun, hal itu tidak akan selalu bekerja dalam setiap kasus, karena metode lain saya menelepon dari metode saya membutuhkan char sebagai input. Oleh karena itu saya harus menemukan cara untuk secara tegas mengambil char sebagai input.

Bantuan?

Larutan

Anda bisa mengambil karakter pertama dari Scanner.berikutnya:

char c = reader.next().charAt(0);

Untuk mengkonsumsi exactly satu karakter yang bisa anda gunakan:

char c = reader.findInLine(".").charAt(0);

Untuk mengkonsumsi strictly satu karakter yang bisa anda gunakan:

char c = reader.next(".").charAt(0);
Komentar (12)

Setup scanner:

reader.useDelimiter("");

Setelah ini pembaca.next() akan kembali single-karakter string.

Komentar (0)

Tidak ada metode API untuk mendapatkan karakter dari Scanner. Anda harus mendapatkan String menggunakan scanner.next() dan memohon String.charAt(0) metode dikembalikan String.

Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);

Hanya untuk menjadi aman dengan spasi putih anda juga bisa panggilan pertama trim() pada string dengan menghilangkan spasi putih.

Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
Komentar (0)

Ada tiga cara untuk mendekati masalah ini:

  • Panggilan next() pada Scanner, dan ekstrak karakter pertama dari String (misalnya charAt(0)) Jika anda ingin membaca seluruh baris sebagai karakter, iterate atas sisa karakter dalam String. Jawaban lainnya memiliki kode ini.

  • Gunakan setDelimiter("") untuk mengatur pembatas string kosong. Hal ini akan menyebabkan next() untuk tokenize ke string yang tepat satu karakter lama. Jadi anda bisa berulang kali panggilan next().charAt(0) untuk beralih karakter. Anda kemudian dapat mengatur pembatas ke nilai aslinya dan melanjutkan pemindaian dengan cara biasa!

  • Gunakan Pembaca API bukan Scanner API. Pembaca.read() metode yang memberikan sebuah karakter tunggal membaca dari input stream. Misalnya:

Reader reader = new InputStreamReader(System.di); int ch = reader.read(); jika (ch != -1) { // memeriksa EOF // kita memiliki karakter ... }


Ketika anda membaca dari konsol melalui Sistem.dalam, input biasanya buffered oleh sistem operasi, dan hanya "dirilis" untuk aplikasi ketika pengguna MEMASUKKAN jenis. Jadi jika anda berniat aplikasi anda untuk menanggapi individu keyboard stroke, hal ini tidak akan bekerja. Anda akan perlu melakukan beberapa OS-spesifik asli kode barang untuk mematikan atau bekerja di sekitar garis-buffering untuk konsol di tingkat OS.

Referensi:

Komentar (1)

Ini benar-benar doesn't bekerja:

char c = reader.next().charAt(0);

Ada beberapa penjelasan yang baik dan referensi dalam pertanyaan ini: https://stackoverflow.com/questions/18746185/why-doesnt-the-scanner-class-have-a-nextchar-method "Sebuah Scanner istirahat masukan ke dalam token menggunakan pembatas pola", yang cukup terbuka. Misalnya ketika menggunakan ini

c = lineScanner.next().charAt(0);

untuk lini input "(1 + 9) / (3 - 1) + 6 - 2" panggilan untuk selanjutnya kembali "(1", c akan ditetapkan untuk '(', dan anda'll akhirnya kehilangan '1' pada panggilan berikutnya ke depan()

Biasanya ketika anda ingin mendapatkan karakter yang anda ingin mengabaikan spasi. Ini bekerja untuk saya:

c = lineScanner.findInLine("[^\\s]").charAt(0);

Referensi: https://stackoverflow.com/questions/1181271/regex-to-match-a-single-character-that-is-anything-but-a-space

Komentar (1)

Anda dapat memecahkan masalah ini, "meraih keyboard input satu karakter pada satu waktu" sangat sederhana. Tanpa harus menggunakan Scanner dan juga tidak membersihkan input buffer sebagai efek samping, dengan menggunakan ini.

char c = (char)System.in.read();

Jika semua yang anda butuhkan adalah fungsi yang sama dengan bahasa C "getChar()" fungsi ini akan bekerja besar. Keuntungan yang Besar dari "System.di.read()" adalah buffer tidak dibersihkan setelah setiap char anda ambil. Jadi jika anda masih membutuhkan semua masukan pengguna anda masih bisa mendapatkan sisa dari input buffer. The "char c = scanner.next().charAt(0);," cara ambil char tapi akan jelas buffer.

// Java program to read character without using Scanner
public class Main
{
    public static void main(String[] args)
    {
        try {
            String input = "";
            // Grab the First char, also wait for user input if the buffer is empty.
            // Think of it as working just like getChar() does in C.
            char c = (char)System.in.read();
            while(c != '\n') {
                //
                input += c; // 

                //then grab the next char
                c = (char)System.in.read();
            }
            //print back out all the users input
            System.out.println(input);
        } catch (Exception e){
            System.out.println(e);
        }
    }
}  

Semoga ini bermanfaat, dan semoga berhasil! P. S. Maaf, aku tahu ini adalah posting yang lebih tua, tapi saya berharap bahwa jawaban saya membawa wawasan baru dan bisa membantu orang lain yang juga memiliki masalah ini.

Komentar (0)

Cara terbaik untuk mengambil input dari sebuah karakter dalam Scanner kelas adalah:

Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.next().charAt(0);
Komentar (0)

Ada dua pendekatan, anda dapat mengambil persis satu karakter atau benar-benar salah satu karakter. Ketika anda gunakan tepat, pembaca akan mengambil hanya karakter pertama, terlepas dari berapa banyak karakter yang anda input.

Misalnya:

import java.util.Scanner;  

public class ReaderExample {  

    public static void main(String[] args) {  

        try {  

        Scanner reader = new Scanner(System.in);

        char c = reader.findInLine(".").charAt(0);

            reader.close();  

            System.out.print(c);

        } catch (Exception ex) {  

            System.out.println(ex.getMessage());  

        }

    }  

}  

Ketika anda memberikan satu set karakter sebagai masukan, mengatakan "abcd", pembaca akan mempertimbangkan hanya karakter pertama yaitu, huruf 'a'

Tapi ketika anda menggunakan ketat, input harus hanya satu karakter. Jika input lebih dari satu karakter, maka pembaca tidak akan mengambil input

import java.util.Scanner;  

public class ReaderExample {  

    public static void main(String[] args) {  

        try {  

        Scanner reader = new Scanner(System.in);

        char c = reader.next(".").charAt(0);

            reader.close();  

            System.out.print(c);

        } catch (Exception ex) {  

            System.out.println(ex.getMessage());  

        }

    }  

}  

Misalkan anda memberikan masukan "abcd", tidak ada masukan diambil, dan variabel c akan memiliki nilai Null.

Komentar (0)
import java.util.Scanner;

public class userInput{
    public static void main(String[] args){
        // Creating your scanner with name kb as for keyBoard
        Scanner kb = new Scanner(System.in);

        String name;
        int age;
        char bloodGroup;
        float height;

        // Accepting Inputs from user
        System.out.println("Enter Your Name");
        name = kb.nextLine(); // for entire line of String including spaces
        System.out.println("Enter Your Age");
        age = kb.nextInt(); // for taking Int
        System.out.println("Enter Your BloodGroup : A/B/O only");
        bloodGroup  = kb.next().charAt(0); // For character at position 0
        System.out.println("Enter Your Height in Meters");
        height = kb.nextFloat(); // for taking Float value

        // closing your scanner object
        kb.close();

        // Outputting All
        System.out.println("Name : " +name);
        System.out.println("Age : " +age);
        System.out.println("BloodGroup : " +bloodGroup);
        System.out.println("Height : " +height+" m");

    }
}
Komentar (0)

Anda harus menggunakan kustom anda masukan pembaca untuk hasil yang lebih cepat daripada penggalian karakter pertama dari membaca String. Link untuk Custom ScanReader dan penjelasan: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8

Kode untuk pemindaian Char :

BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
Komentar (2)

Coba ini: char c=S. nextLine().charAt(0);

Komentar (0)

Anda harus mendapatkan String menggunakan scanner.next() dan memohon String.charAt(0) metode dikembalikan String. Exmple :

    import java.util.Scanner;

    public class InputC{

            public static void main(String[] args) {
                // TODO Auto-generated method stub
                   // Declare the object and initialize with
                   // predefined standard input object
                    Scanner scanner = new Scanner(System.in);
                    System.out.println("Enter a character: ");
                    // Character input
                    char c = scanner.next().charAt(0);
                    // Print the read value
                    System.out.println("You have entered: "+c);
            }

        }

output

Enter a character: 
a
You have entered: a
Komentar (0)
package Pack;

import java.util.Scanner;

public class test { 
    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        char c = reader.next(".").charAt(0);

    }
}

Untuk mendapatkan hanya satu karakter char c = reader.berikutnya(".").charAt(0);

Komentar (1)
// Use a BufferedReader to read characters from the console.
import java.io.*;
class BRRead {
public static void main(String args[]) throws IOException
{
char c;
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// read characters
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}
Komentar (0)

Hanya menggunakan...

Scanner keyboard = new Scanner(System.in);<br>
char c = keyboard.next().charAt(0);

Yang's ini...

Komentar (0)

Coba ini

Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char c=s.charAt(0);
Komentar (0)
Scanner key = new Scanner(System.in);
//shortcut way 
char firstChar=key.next().charAt(0);  
//how it works;
/*key.next() takes a String as input then,
charAt method is applied on that input (String)
with a parameter of type int (position) that you give to get      
that char at that position.
You can simply read it out as: 
the char at position/index 0 from the input String
(through the Scanner object key) is stored in var. firstChar (type char) */

//you can also do it in a bit elabortive manner to understand how it exactly works
String input=key.next();  // you can also write key.nextLine to take a String with spaces also
char firstChar=input.charAt(0);
char charAtAnyPos= input.charAt(pos);  // in pos you enter that index from where you want to get the char from

By the way, anda dapat't mengambil char langsung sebagai input. Seperti yang anda lihat di atas, String pertama diambil kemudian charAt(0); ditemukan dan disimpan

Komentar (0)
import java.io.*;

class abc // enter class name (here abc is class name)
{
    public static void main(String arg[])
    throws IOException // can also use Exception
    {
        BufferedReader z =
            new BufferedReader(new InputStreamReader(System.in));

        char ch = (char) z.read();
    } // PSVM
} // class
Komentar (0)

Anda bisa menggunakan typecasting:

Scanner sc= new Scanner(System.in);
char a=(char) sc.next();

Dengan cara ini anda akan mengambil input dalam String, karena fungsi 'next()' tapi kemudian itu akan dikonversi menjadi karakter karena 'char' disebutkan dalam kurung.

Metode konversi dari tipe data dengan menyebutkan tujuan tipe data di dalam kurung disebut typecating. Ia bekerja untuk saya, saya berharap ini bekerja untuk u :)

Komentar (1)

Untuk mencari indeks dari karakter yang diberikan menyengat, anda dapat menggunakan kode ini:

package stringmethodindexof;

import java.util.Scanner;
import javax.swing.JOptionPane;

/**
 *
 * @author ASUS//VERY VERY IMPORTANT
 */
public class StringMethodIndexOf {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String email;
        String any;
        //char any;

//any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER").charAt(0);       
//THE AVOBE LINE IS FOR CHARACTER INPUT LOL
//System.out.println("Enter any character or string to find out its INDEX NUMBER");
       //Scanner r=new Scanner(System.in);
      // any=r.nextChar();
        email = JOptionPane.showInputDialog(null,"Enter any string or anything you want:");
         any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER");
        int result;
        result=email.indexOf(any);
        JOptionPane.showMessageDialog(null, result);

    }

}
Komentar (0)