【问题标题】:How can I read input from the console using the Scanner class in Java?如何使用 Java 中的 Scanner 类从控制台读取输入?
【发布时间】:2012-08-05 23:26:00
【问题描述】:

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

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

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

【问题讨论】:

标签: java java.util.scanner


【解决方案1】:

说明java.util.Scanner 工作原理的简单示例是从System.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 变量。

您可以在API Documentation for java.util.Scanner 中找到有关其实施的更多信息

【讨论】:

  • 假设我只使用一次扫描仪,并且不想通过初始化然后关闭扫描仪来弄乱我的代码 - 有没有一种方法可以在不构造类的情况下从用户那里获取输入?跨度>
  • 您可以在 JDK 8 中使用 try with resource 语句,例如;尝试(扫描仪扫描仪 = 新的扫描仪(System.in)){ }
【解决方案2】:
Scanner scan = new Scanner(System.in);
String myLine = scan.nextLine();

【讨论】:

    【解决方案3】:

    从控制台读取数据

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

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

    • Scanner 使用分隔符模式将其输入拆分为标记,默认情况下匹配空格 (\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
    

    【讨论】:

    • 这是一个比原来的 imo 更好、更新的答案。
    • 有关详细信息,请参阅:BufferedReader, Scanner 从本地文件 (OR) 网络文件中读取数据。
    【解决方案4】:

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

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

    这样试试:

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

    【讨论】:

      【解决方案5】:

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

      in.nextInt(); // It just reads the numbers
      
      in.nextLine(); // It get the String which user enters
      

      要访问 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);
          }
      }
      

      【讨论】:

        【解决方案6】:
        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);
            }
        }
        

        【讨论】:

        • 每次都创建一个新的 Scanner 有什么特别的原因,还是只是复制+粘贴而不了解它是如何工作的?
        • @EvgeniSergeev new Scanner 是您为获取用户输入而创建的对象。阅读更多关于Scanner class ...
        • 绝对复制粘贴。不需要每次都使用新的扫描器(这也不遵循 java 变量命名约定)。
        【解决方案7】:

        您可以编写一个简单的程序来询问用户的姓名并打印回复使用的任何输入内容。

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

        所以你需要 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 语句。

        【讨论】:

        • 这实际上是一个正确的解释,但是如果你添加一些更多的方法,比如nextLine(),nextLong() .. 等可能会更好
        • 学生必须按照例子来测试其余的方法并自己学习,这就是我认为的经验教训。
        【解决方案8】:

        一个简单的例子:

        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】:

          当用户输入他/她的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);
          

          【讨论】:

            【解决方案10】:
            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());
              }
              

            【讨论】:

            【解决方案11】:
            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();
                }
            }
            

            【讨论】:

              【解决方案12】:

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

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

              【讨论】:

              • 没有理由使用Scanner 的多个实例。
              【解决方案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();
                      }
                  }
              

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

              Doc

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

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

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

              这里我们传递InputStream 引用,它只不过是System.In。在这里它打开了InputStream 管道用于控制台输入。

              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,此代码将打开套接字以从控制台读取。

              【讨论】:

                【解决方案14】:

                您可以流式处理此代码:

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

                【讨论】:

                • 这并没有提供新的信息,而且由于缺少解释,它比现有答案的帮助更小。
                • 你所说的“流此代码”是什么意思?您的意思是“遵循此代码”?还是别的什么?
                【解决方案15】:

                您可以在 Java 中使用 Scanner 类

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

                【讨论】:

                  【解决方案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
                    }
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-11-24
                    • 2011-11-08
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多