Bagaimana saya bisa membaca input dari konsol menggunakan kelas Scanner di Java?


224

Bagaimana saya bisa membaca input dari konsol menggunakan Scannerkelas? Sesuatu seperti ini:

System.out.println("Enter your username: ");
Scanner = input(); // Or something like this, I don't know the code

Pada dasarnya, yang saya inginkan adalah pemindai membaca input untuk nama pengguna, dan menetapkan input ke Stringvariabel.



Jawaban:


341

Contoh sederhana untuk menggambarkan bagaimana java.util.Scannerkarya akan membaca bilangan bulat tunggal dari System.in. Ini sangat sederhana.

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

Untuk mengambil nama pengguna yang mungkin akan saya gunakan sc.nextLine().

System.out.println("Enter your username: ");
Scanner scanner = new Scanner(System.in);
String username = scanner.nextLine();
System.out.println("Your username is " + username);

Anda juga dapat menggunakan next(String pattern)jika Anda ingin lebih mengontrol input, atau hanya memvalidasi usernamevariabel.

Anda akan menemukan informasi lebih lanjut tentang penerapannya di Dokumentasi API untukjava.util.Scanner


1
Katakanlah saya hanya menggunakan pemindai sekali dan tidak ingin mengacaukan kode saya dengan menginisialisasi dan kemudian menutup Pemindai - apakah ada cara untuk mendapatkan input dari pengguna tanpa membuat kelas?
Nearoo

3
Anda bisa menggunakan percobaan dengan pernyataan sumber daya di JDK 8 seperti; coba (Pemindai pemindai = Pemindai baru (System.in)) {}
Rune Vikestad

33
Scanner scan = new Scanner(System.in);
String myLine = scan.nextLine();

24

Membaca Data Dari Konsol

  • BufferedReaderdisinkronkan, jadi operasi baca pada BufferedReader dapat dilakukan dengan aman dari banyak utas. Ukuran buffer dapat ditentukan, atau ukuran default ( 8192 ) dapat digunakan. Standarnya cukup besar untuk sebagian besar keperluan.

    readLine () « hanya membaca data baris demi baris dari aliran atau sumber. Baris dianggap diakhiri oleh salah satu dari berikut ini: \ n, \ r (atau) \ r \ n

  • Scannermemecah inputnya menjadi token menggunakan pola pembatas, yang secara default cocok dengan spasi putih (s) dan dikenali oleh Character.isWhitespace.

    « Sampai pengguna memasukkan data, operasi pemindaian dapat memblokir, menunggu input. « Gunakan Pemindai ( BUFFER_SIZE = 1024 ) jika Anda ingin menguraikan jenis token tertentu dari aliran. « Namun pemindai tidak aman untuk thread. Itu harus disinkronkan secara eksternal.

    next () «Menemukan dan mengembalikan token lengkap berikutnya dari pemindai ini. nextInt () «Memindai token input berikutnya sebagai int.

Kode

String name = null;
int number;

java.io.BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
name = in.readLine(); // If the user has not entered anything, assume the default value.
number = Integer.parseInt(in.readLine()); // It reads only String,and we need to parse it.
System.out.println("Name " + name + "\t number " + number);

java.util.Scanner sc = new Scanner(System.in).useDelimiter("\\s");
name = sc.next();  // It will not leave until the user enters data.
number = sc.nextInt(); // We can read specific data.
System.out.println("Name " + name + "\t number " + number);

// The Console class is not working in the IDE as expected.
java.io.Console cnsl = System.console();
if (cnsl != null) {
    // Read a line from the user input. The cursor blinks after the specified input.
    name = cnsl.readLine("Name: ");
    System.out.println("Name entered: " + name);
}

Input dan output Stream

Reader Input:     Output:
Yash 777          Line1 = Yash 777
     7            Line1 = 7

Scanner Input:    Output:
Yash 777          token1 = Yash
                  token2 = 777

Ini sekarang jawaban yang lebih baik dan lebih terkini daripada yang asli.
logicOnAbstractions

Untuk informasi lebih lanjut, lihat: BufferedReader, Scanneruntuk membaca data dari File Jaringan File Lokal (ATAU).
Yash

14

Ada masalah dengan metode input.nextInt () - hanya membaca nilai int.

Jadi ketika membaca baris berikutnya menggunakan input.nextLine () Anda menerima "\ n", yaitu Enterkuncinya. Jadi untuk melewati ini, Anda harus menambahkan input.nextLine ().

Cobalah seperti itu:

 System.out.print("Insert a number: ");
 int number = input.nextInt();
 input.nextLine(); // This line you have to add (it consumes the \n character)
 System.out.print("Text1: ");
 String text1 = input.nextLine();
 System.out.print("Text2: ");
 String text2 = input.nextLine();

10

Ada beberapa cara untuk mendapatkan input dari pengguna. Di sini, di program ini kita akan mengambil kelas Scanner untuk mencapai tugas. Kelas Scanner ini berada di bawah java.util, maka baris pertama dari program ini adalah import java.util.Scanner; yang memungkinkan pengguna untuk membaca nilai dari berbagai jenis di Jawa. Baris pernyataan impor harus berada di baris pertama program java, dan kami melanjutkan untuk kode.

in.nextInt(); // It just reads the numbers

in.nextLine(); // It get the String which user enters

Untuk mengakses metode di kelas Pemindai, buat objek pemindai baru sebagai "dalam". Sekarang kita menggunakan salah satu metodenya, yaitu "selanjutnya". Metode "selanjutnya" mendapatkan string teks yang dimasukkan pengguna pada keyboard.

Di sini saya menggunakan in.nextLine();untuk mendapatkan String yang dimasukkan pengguna.

import java.util.Scanner;

class GetInputFromUser {
    public static void main(String args[]) {
        int a;
        float b;
        String s;

        Scanner in = new Scanner(System.in);
        System.out.println("Enter a string");
        s = in.nextLine();
        System.out.println("You entered string " + s);

        System.out.println("Enter an integer");
        a = in.nextInt();
        System.out.println("You entered integer " + a);

        System.out.println("Enter a float");
        b = in.nextFloat();
        System.out.println("You entered float " + b);
    }
}

9
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] arguments){
        Scanner input = new Scanner(System.in);

        String username;
        double age;
        String gender;
        String marital_status;
        int telephone_number;

        // Allows a person to enter his/her name   
        Scanner one = new Scanner(System.in);
        System.out.println("Enter Name:" );  
        username = one.next();
        System.out.println("Name accepted " + username);

        // Allows a person to enter his/her age   
        Scanner two = new Scanner(System.in);
        System.out.println("Enter Age:" );  
        age = two.nextDouble();
        System.out.println("Age accepted " + age);

        // Allows a person to enter his/her gender  
        Scanner three = new Scanner(System.in);
        System.out.println("Enter Gender:" );  
        gender = three.next();
        System.out.println("Gender accepted " + gender);

        // Allows a person to enter his/her marital status
        Scanner four = new Scanner(System.in);
        System.out.println("Enter Marital status:" );  
        marital_status = four.next();
        System.out.println("Marital status accepted " + marital_status);

        // Allows a person to enter his/her telephone number
        Scanner five = new Scanner(System.in);
        System.out.println("Enter Telephone number:" );  
        telephone_number = five.nextInt();
        System.out.println("Telephone number accepted " + telephone_number);
    }
}

5
Apakah ada alasan khusus mengapa Pemindai baru dibuat setiap saat, atau ini hanya menyalin + menempel tanpa memahami cara kerjanya?
Evgeni Sergeev

1
@EvgeniSergeev Scanner baru adalah objek yang Anda buat untuk mendapatkan input pengguna. baca lebih lanjut tentang kelas Pemindai ...
user3598655

pasti copy paste. Tidak perlu untuk pemindai baru setiap kali (ini juga tidak mengikuti konvensi penamaan variabel java).
Ditakdirkan

6

Anda dapat membuat program sederhana untuk menanyakan nama pengguna dan mencetak apa pun yang menggunakan input balasan.

Atau minta pengguna untuk memasukkan dua angka dan Anda dapat menambah, mengalikan, mengurangi, atau membagi angka-angka itu dan mencetak jawaban untuk input pengguna seperti perilaku kalkulator.

Jadi di sana Anda memerlukan kelas Scanner. Anda harus import java.util.Scanner;, dan dalam kode yang perlu Anda gunakan:

Scanner input = new Scanner(System.in);

input adalah nama variabel.

Scanner input = new Scanner(System.in);

System.out.println("Please enter your name: ");
s = input.next(); // Getting a String value

System.out.println("Please enter your age: ");
i = input.nextInt(); // Getting an integer

System.out.println("Please enter your salary: ");
d = input.nextDouble(); // Getting a double

Lihat bagaimana berbeda ini: input.next();, i = input.nextInt();,d = input.nextDouble();

Menurut String, int dan dobel bervariasi dengan cara yang sama untuk sisanya. Jangan lupa pernyataan impor di bagian atas kode Anda.


2
Ini sebenarnya penjelasan yang tepat, Tapi bisa lebih baik jika Anda menambahkan beberapa metode lagi seperti nextLine (), nextLong () .. etc
subhashis

Siswa harus mengikuti contoh dan menguji sisa metode dan belajar sendiri itulah yang saya yakini sebagai belajar dengan pengalaman sendiri.
user3598655

4

Contoh sederhana:

import java.util.Scanner;

public class Example
{
    public static void main(String[] args)
    {
        int number1, number2, sum;

        Scanner input = new Scanner(System.in);

        System.out.println("Enter First multiple");
        number1 = input.nextInt();

        System.out.println("Enter second multiple");
        number2 = input.nextInt();

        sum = number1 * number2;

        System.out.printf("The product of both number is %d", sum);
    }
}

3

Ketika pengguna memasukkan / nya username, periksa untuk masuk juga.

java.util.Scanner input = new java.util.Scanner(System.in);
String userName;
final int validLength = 6; // This is the valid length of an user name

System.out.print("Please enter the username: ");
userName = input.nextLine();

while(userName.length() < validLength) {

    // If the user enters less than validLength characters
    // ask for entering again
    System.out.println(
        "\nUsername needs to be " + validLength + " character long");

    System.out.print("\nPlease enter the username again: ");
    userName = input.nextLine();
}

System.out.println("Username is: " + userName);

2
  1. Untuk membaca input:

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
  2. Untuk membaca input ketika Anda memanggil metode dengan beberapa argumen / parameter:

    if (args.length != 2) {
        System.err.println("Utilizare: java Grep <fisier> <cuvant>");
        System.exit(1);
    }
    try {
        grep(args[0], args[1]);
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }

1
Anda harus membaca halaman bantuan ini tentang memformat teks / kode Anda: stackoverflow.com/help/formatting .
Tom

Anda mungkin ingin menerjemahkannya (dari bahasa Prancis?).
Peter Mortensen

2
import java.util.*;

class Ss
{
    int id, salary;
    String name;

   void Ss(int id, int salary, String name)
    {
        this.id = id;
        this.salary = salary;
        this.name = name;
    }

    void display()
    {
        System.out.println("The id of employee:" + id);
        System.out.println("The name of employye:" + name);
        System.out.println("The salary of employee:" + salary);
    }
}

class employee
{
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);

        Ss s = new Ss(sc.nextInt(), sc.nextInt(), sc.nextLine());
        s.display();
    }
}

2

Ini adalah kelas lengkap yang melakukan operasi yang diperlukan:

import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        final int valid = 6;

        Scanner one = new Scanner(System.in);
        System.out.println("Enter your username: ");
        String s = one.nextLine();

        if (s.length() < valid) {
            System.out.println("Enter a valid username");
            System.out.println(
                "User name must contain " + valid + " characters");
            System.out.println("Enter again: ");
            s = one.nextLine();
        }

        System.out.println("Username accepted: " + s);

        Scanner two = new Scanner(System.in);
        System.out.println("Enter your age: ");
        int a = two.nextInt();
        System.out.println("Age accepted: " + a);

        Scanner three = new Scanner(System.in);
        System.out.println("Enter your sex: ");
        String sex = three.nextLine();
        System.out.println("Sex accepted: " + sex);
    }
}

1
Tidak ada alasan untuk menggunakan banyak contoh Scanner.
Radiodef

1

Anda dapat mengalirkan kode ini:

Scanner obj= new Scanner(System.in);
String s = obj.nextLine();

1
Ini tidak memberikan informasi baru dan bahkan kurang membantu daripada jawaban yang ada karena penjelasan yang hilang.
Tom

1
Apa yang Anda maksud dengan "mengalir kode ini" ? Apakah maksud Anda "ikuti kode ini" ? Atau sesuatu yang lain?
Peter Mortensen

0

Anda dapat menggunakan kelas Pemindai di Jawa

Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
System.out.println("String: " + s);

0

Ada cara sederhana untuk membaca dari konsol.

Silakan temukan kode di bawah ini:

import java.util.Scanner;

    public class ScannerDemo {

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);

            // Reading of Integer
            int number = sc.nextInt();

            // Reading of String
            String str = sc.next();
        }
    }

Untuk pemahaman terperinci, silakan merujuk ke dokumen di bawah ini.

Dokter

Sekarang mari kita bicara tentang pemahaman terperinci tentang kerja kelas Scanner:

public Scanner(InputStream source) {
    this(new InputStreamReader(source), WHITESPACE_PATTERN);
}

Ini adalah konstruktor untuk membuat instance Scanner.

Di sini kita melewati InputStreamreferensi yang tidak lain adalah a System.In. Di sini terbuka InputStreamPipa untuk input konsol.

public InputStreamReader(InputStream in) {
    super(in);
    try {
        sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## Check lock object
    }
    catch (UnsupportedEncodingException e) {
        // The default encoding should always be available
        throw new Error(e);
    }
}

Dengan melewati System.in kode ini akan membuka soket untuk membaca dari konsol.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.