如何使用 Java 中的 Scanner 类从控制台读取输入?

How can I read input from the console using the Scanner class in Java?

提问人:Hock3yPlayer 提问时间:8/9/2012 最后编辑:Peter MortensenHock3yPlayer 更新时间:9/1/2022 访问量:1639618

问:

如何使用该类从控制台读取输入?像这样的东西:Scanner

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

基本上,我想要的只是让扫描仪读取用户名的输入,并将输入分配给变量。String

java.util.scanner

评论

1赞 ARJUN 10/15/2014
在此处查看> Java 程序,以使用 scanner 类从用户那里获取输入
2赞 John Detroit 4/11/2018
好的代码示例:codeflex.co/java-scanner-example-read-from-console

答:

35赞 Matt_Bro 8/9/2012 #1
Scanner scan = new Scanner(System.in);
String myLine = scan.nextLine();
364赞 Rune Vikestad 8/9/2012 #2

一个简单的例子来说明如何从 中读取单个整数。这真的很简单。java.util.ScannerSystem.in

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

要检索用户名,我可能会使用 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);

如果想要对输入进行更多控制,也可以使用 next(String pattern),或者只验证变量。username

您可以在 java.util.Scanner 的 API 文档中找到有关其实现的更多信息

评论

1赞 Nearoo 10/13/2017
假设我只使用一次扫描程序,并且不想通过初始化然后关闭扫描程序来弄乱我的代码 - 有没有办法在不构造类的情况下从用户那里获得输入?
6赞 Rune Vikestad 10/16/2017
您可以在 JDK 8 中使用 try with resource 语句,例如;try(Scanner scanner = new Scanner(System.in)){ }
3赞 Anirban Nag 'tintinmj' 6/9/2013 #3

当用户输入他/她时,还要检查有效条目。username

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);
4赞 Clark 8/19/2013 #4

一个简单的例子:

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);
    }
}
9赞 user2196023 8/20/2013 #5
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赞 Evgeni Sergeev 6/22/2015
每次都创建一个新的扫描仪有什么特殊原因,或者这只是复制+粘贴而不了解它是如何工作的?
1赞 user3598655 12/25/2015
@EvgeniSergeev新的 Scanner 是您为获取用户输入而创建的对象。阅读更多关于扫描仪类的信息 ...
0赞 gnomed 2/18/2017
绝对是复制粘贴的。不需要每次都使用新的扫描程序(这也不符合 java 变量命名约定)。
6赞 user3598655 5/6/2014 #6

您可以制作一个简单的程序来询问用户名并打印任何回复,使用输入。

或者要求用户输入两个数字,您可以将这些数字相加、相乘、相减或相除,然后打印用户输入的答案,就像计算器的行为一样。

所以你需要 Scanner 类。您必须 ,并且在代码中您需要使用:import java.util.Scanner;

Scanner input = new Scanner(System.in);

input是变量名称。

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

看看这有什么不同:, ,input.next();i = input.nextInt();d = input.nextDouble();

根据 String,int 和 double 的其余部分以相同的方式变化。不要忘记代码顶部的 import 语句。

评论

2赞 subhashis 2/1/2015
这实际上是一个适当的解释,但如果你添加更多的方法,比如 nextLine()、nextLong() ..等
0赞 user3598655 8/29/2016
学生必须按照示例并测试其余方法并自己学习,这就是我认为用自己的经验学习。
2赞 sunil 7/30/2014 #7
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赞 Prasenjit Chatterjee 3/29/2015 #8

以下是执行所需操作的完整类:

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赞 Radiodef 4/5/2015
没有理由使用 的多个实例。Scanner
2赞 MyUserQuestion 4/4/2015 #9
  1. 要读取输入:

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
    
  2. 若要在调用具有某些参数/参数的方法时读取输入,请执行以下操作:

    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赞 Tom 4/4/2015
您应该阅读有关格式化文本/代码的帮助页面:stackoverflow.com/help/formatting
0赞 Peter Mortensen 3/22/2018
你可能想翻译它(从法语?
26赞 Yash 7/6/2015 #10

从控制台读取数据

  • BufferedReader 是同步的,因此可以从多个线程安全地执行对 BufferedReader 的读取操作。可以指定缓冲区大小,也可以使用默认大小 (8192)。默认值对于大多数用途来说已经足够大了。

    readLine() « 只是从流或源中逐行读取数据。一条线被视为由以下任何一项终止:\n、\r(或)\r\n

  • Scanner 使用分隔符模式将其输入分解为标记,默认情况下,该模式与 whitespace (\s) 匹配,并由 Character.isWhitespace 识别。

    « 在用户输入数据之前,扫描操作可能会阻塞,等待输入。 « 使用 Scanner(BUFFER_SIZE = 1024) 如果要从流中解析特定类型的令牌。 « 然而,扫描仪不是线程安全的。它必须与外部同步。

    next() « 从此扫描程序中查找并返回下一个完整的令牌。 nextInt() « 将输入的下一个标记扫描为 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);
}

Stream 的输入和输出

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

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

评论

0赞 logicOnAbstractions 3/27/2018
现在,这是一个比原来的答案更好、更新的答案。
0赞 Yash 2/25/2019
有关详细信息,请参阅:BufferedReader,用于从本地文件 (OR) 网络文件读取数据的扫描程序。
10赞 Jaimin Patel 1/1/2016 #11

有几种方法可以从用户那里获取输入。在这个程序中,我们将采用 Scanner 类来完成任务。这个 Scanner 类属于 ,因此程序的第一行是 import java.util.Scanner; 它允许用户读取 Java 中各种类型的值。import 语句行必须位于 java 程序的第一行,我们继续编写代码。java.util

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

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

若要访问 Scanner 类中的方法,请创建一个新的 scanner 对象,如“in”。现在我们使用其中一种方法,即“下一步”。“next”方法获取用户在键盘上输入的文本字符串。

在这里,我用于获取用户输入的字符串。in.nextLine();

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);
    }
}
0赞 Yasir Shabbir Choudhary 7/7/2017 #12

您可以在 Java 中使用 Scanner 类

Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
System.out.println("String: " + s);
1赞 Hasnain Ali Bohra 7/7/2017 #13

有一种简单的方法可以从控制台读取。

请找到以下代码:

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

详细了解请参考以下文档。

医生

现在我们来谈谈对 Scanner 类工作的详细理解:

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

这是用于创建 Scanner 实例的构造函数。

在这里,我们传递的引用只不过是一个 .在这里,它打开用于控制台输入的管道。InputStreamSystem.InInputStream

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

通过传递 System.in 此代码将打开套接字以从控制台读取。

1赞 Tarik Billa 8/27/2017 #14

您可以流出以下代码:

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

评论

1赞 Tom 9/12/2017
这不会提供新的信息,而且由于缺少解释,甚至不如现有答案有用。
1赞 Peter Mortensen 3/22/2018
“流此代码”是什么意思?你的意思是“遵循此代码”吗?还是别的什么?
22赞 Vaibhav Bhalla 3/7/2018 #15

input.nextInt() 方法有问题 - 它只读取 int 值。

因此,当使用 input.nextLine() 读取下一行时,您会收到“\n”,即键。因此,要跳过此操作,您必须添加 input.nextLine()。Enter

试试吧:

 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();
0赞 Tarik Billa 11/1/2021 #16
import java.util.Scanner;  // Import the Scanner class

class Main { // Main is the class name
  public static void main(String[] args) {
    Scanner myObj = new Scanner(System.in);  // Create a Scanner object
    System.out.println("Enter username");

    String userName = myObj.nextLine();  // Read user input
    System.out.println("Username is: " + userName);  // Output user input
  }
}
0赞 Naman Aadhar 9/1/2022 #17

你写了

Scanner = input()

这是错误的方法,你必须做一个整数或字符串,我想更喜欢字符串,然后给一个字符串任何名称,可以是 i,可以是 n 或其他任何东西,记住你是在给用户名命名你也可以给名字用户名,代码是

String username = sc.nextline();
System.our.println("the username is" + username);

我希望你现在明白了

评论

0赞 Brooklyn99 9/7/2022
你做了哪些其他答案没有的新内容?