Làm cách nào tôi có thể đọc đầu vào từ bàn điều khiển bằng lớp Máy quét trong Java?


224

Làm thế nào tôi có thể đọc đầu vào từ bàn điều khiển bằng cách sử dụng Scanner lớp? Một cái gì đó như thế này:

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

Về cơ bản, tất cả những gì tôi muốn là máy quét đọc một đầu vào cho tên người dùng và gán đầu vào cho một Stringbiến.



Câu trả lời:


341

Một ví dụ đơn giản để minh họa cách java.util.Scannercác công trình sẽ đọc một số nguyên duy nhất từ ​​đó System.in. Nó thực sự khá đơn giản.

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

Để lấy tên người dùng, tôi có thể sử dụng 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);

Bạn cũng có thể sử dụng next(String pattern)nếu bạn muốn kiểm soát nhiều hơn đầu vào, hoặc chỉ xác nhậnusername biến.

Bạn sẽ tìm thấy thêm thông tin về việc triển khai chúng trong Tài liệu API chojava.util.Scanner


1
Giả sử tôi chỉ sử dụng máy quét một lần và không muốn làm lộn xộn mã của mình bằng cách khởi tạo rồi đóng Máy quét - có cách nào để nhận đầu vào từ người dùng mà không cần xây dựng một lớp không?
Nearoo

3
Bạn có thể sử dụng thử với câu lệnh tài nguyên trong JDK 8 như; thử (Máy quét quét = máy quét mới (System.in)) {}
Rune Vikestad

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

24

Đọc dữ liệu từ bảng điều khiển

  • BufferedReaderđược đồng bộ hóa, do đó, các thao tác đọc trên BufferedReader có thể được thực hiện an toàn từ nhiều luồng. Kích thước bộ đệm có thể được chỉ định hoặc kích thước mặc định ( 8192 ) có thể được sử dụng. Mặc định là đủ lớn cho hầu hết các mục đích.

    readLine () « chỉ đọc từng dòng dữ liệu từ luồng hoặc nguồn. Một dòng được coi là bị chấm dứt bởi bất kỳ ai trong số này: \ n, \ r (hoặc) \ r \ n

  • Scannerphá vỡ đầu vào của nó thành các mã thông báo bằng cách sử dụng mẫu dấu phân cách, theo mặc định khớp với khoảng trắng (\ s) và nó được nhận dạng bởi Character.isWhitespace.

    « Cho đến khi người dùng nhập dữ liệu, thao tác quét có thể chặn, chờ đầu vào. « Sử dụng Trình quét ( BUFFER_SIZE = 1024 ) nếu bạn muốn phân tích một loại mã thông báo cụ thể từ một luồng. « Tuy nhiên, một máy quét không phải là chủ đề an toàn. Nó phải được đồng bộ hóa bên ngoài.

    next () «Tìm và trả lại mã thông báo hoàn chỉnh tiếp theo từ máy quét này. nextInt () «Quét mã thông báo tiếp theo của đầu vào dưới dạng int.

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);
}

Đầu vào và đầu ra của Stream

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

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

Đây là một câu trả lời tốt hơn, cập nhật hơn so với câu trả lời ban đầu.
logicOn sát thương

Để biết thêm thông tin, hãy xem: BufferedReader, Scannerđể đọc dữ liệu từ Tệp Mạng cục bộ (OR).
Yash

14

Có vấn đề với phương thức input.nextInt () - nó chỉ đọc giá trị int.

Vì vậy, khi đọc dòng tiếp theo bằng input.nextLine () bạn nhận được "\ n", tức là Enterkhóa. Vì vậy, để bỏ qua điều này, bạn phải thêm input.nextLine ().

Hãy thử nó như thế:

 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

Có một số cách để có được đầu vào từ người dùng. Ở đây trong chương trình này, chúng ta sẽ lấy lớp Scanner để đạt được nhiệm vụ. Lớp Scanner này xuất hiện java.util, do đó dòng đầu tiên của chương trình là nhập java.util.Scanner; cho phép người dùng đọc các giá trị của các loại khác nhau trong Java. Dòng câu lệnh nhập phải nằm trong dòng đầu tiên của chương trình java và chúng tôi tiếp tục lấy mã.

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

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

Để truy cập các phương thức trong lớp Máy quét, hãy tạo một đối tượng máy quét mới là "trong". Bây giờ chúng tôi sử dụng một trong những phương pháp của nó, đó là "tiếp theo". Phương thức "tiếp theo" lấy chuỗi văn bản mà người dùng nhập trên bàn phím.

Ở đây tôi đang sử dụng in.nextLine();để lấy Chuỗi mà người dùng nhập vào.

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
Có bất kỳ lý do cụ thể tại sao một Máy quét mới được tạo ra mỗi lần, hoặc đây chỉ là sao chép + dán mà không hiểu cách thức hoạt động của nó?
Evgeni Sergeev

1
@EvgeniSergeev Máy quét mới là đối tượng bạn tạo để lấy đầu vào của người dùng. đọc thêm về lớp Máy quét ...
user3598655

chắc chắn sao chép dán. Không cần một máy quét mới mỗi lần (điều này cũng không tuân theo quy ước đặt tên biến java).
viết

6

Bạn có thể tạo một chương trình đơn giản để hỏi tên người dùng và in bất cứ câu trả lời nào sử dụng đầu vào.

Hoặc yêu cầu người dùng nhập hai số và bạn có thể thêm, nhân, trừ hoặc chia các số đó và in câu trả lời cho đầu vào của người dùng giống như hành vi của máy tính.

Vì vậy, bạn cần lớp Scanner. Bạn phải import java.util.Scanner;, và trong mã bạn cần sử dụng:

Scanner input = new Scanner(System.in);

input là một tên biến.

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

Xem cách này khác: input.next();, i = input.nextInt();,d = input.nextDouble();

Theo một Chuỗi, int và double thay đổi theo cùng một cách cho phần còn lại. Đừng quên câu lệnh nhập ở đầu mã của bạn.


2
Đây thực sự là một lời giải thích phù hợp, nhưng nó có thể tốt hơn nếu bạn thêm một số phương thức khác vào nó như nextLine (), nextLong () .. vv
subhashis

Học sinh phải làm theo các ví dụ và kiểm tra các phương pháp còn lại và tự học, đó là điều tôi tin là học với kinh nghiệm của bản thân.
dùng3598655

4

Một ví dụ đơn giản:

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

Khi người dùng nhập vào username, hãy kiểm tra mục nhập hợp lệ.

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. Để đọc đầu vào:

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
  2. Để đọc đầu vào khi bạn gọi một phương thức với một số đối số / tham số:

    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
Bạn nên đọc trang trợ giúp này về định dạng văn bản / mã của bạn: stackoverflow.com/help/formatted .
Tom

Bạn có thể muốn dịch nó (từ tiếng Pháp?).
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

Đây là lớp hoàn chỉnh thực hiện các hoạt động cần thiết:

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
Không có lý do để sử dụng nhiều trường hợp Scanner.
Radiodef

1

Bạn có thể lưu mã này:

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

1
Điều này không cung cấp thông tin mới và thậm chí còn ít hữu ích hơn các câu trả lời hiện có do thiếu các giải thích.
Tom

1
Bạn có ý nghĩa gì khi "chảy mã này" ? Bạn có nghĩa là "theo mã này" ? Hay cái gì khác?
Peter Mortensen

0

Bạn có thể sử dụng lớp Scanner trong Java

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

0

Có một cách đơn giản để đọc từ bảng điều khiển.

Vui lòng tìm mã dưới đây:

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();
        }
    }

Để hiểu chi tiết, xin vui lòng tham khảo các tài liệu dưới đây.

Bác sĩ

Bây giờ hãy nói về sự hiểu biết chi tiết về lớp Máy quét hoạt động:

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

Đây là hàm tạo để tạo cá thể Scanner.

Ở đây chúng tôi đang chuyển InputStreamtham chiếu không có gì ngoài a System.In. Ở đây, nó mở InputStreamống cho đầu vào giao diện điều khiển.

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);
    }
}

Bằng cách chuyển System.in, mã này sẽ mở ổ cắm để đọc từ bàn điều khiển.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.