从控制台读取用户输入

使用 BufferedReader

System.out.println("Please type your name and press Enter.");

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
    String name = reader.readLine();
    System.out.println("Hello, " + name + "!");
} catch(IOException e) {
    System.out.println("An error occurred: " + e.getMessage());
}

此代码需要以下导入:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

使用 Scanner

Version >= Java SE 5

System.out.println("Please type your name and press Enter");

Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();

System.out.println("Hello, " + name + "!");

此示例需要以下导入:

import java.util.Scanner;

要读取多行,请重复调用 scanner.nextLine()

System.out.println("Please enter your first and your last name, on separate lines.");
    
Scanner scanner = new Scanner(System.in);
String firstName = scanner.nextLine();
String lastName = scanner.nextLine();
    
System.out.println("Hello, " + firstName + " " + lastName + "!");

获得 Stringsnext()nextLine() 有两种方法。next() 返回文本直到第一个空格(也称为标记),nextLine() 返回用户输入的所有文本,直到按下回车键。

Scanner 还提供了读取 String 以外的数据类型的实用方法。这些包括:

scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBigInteger();
scanner.nextBigDecimal();

如果流具有任何更多的请求类型,则使用 has(如 hasNextLine()hasNextInt())为这些方法添加前缀将返回 true。注意:如果输入不是所请求的类型,这些方法将使程序崩溃(例如,为 nextInt() 键入 a)。你可以使用 try {} catch() {} 来防止这种情况(请参阅: 例外

Scanner scanner = new Scanner(System.in); //Create the scanner
scanner.useLocale(Locale.US); //Set number format excepted
System.out.println("Please input a float, decimal separator is .");
if (scanner.hasNextFloat()){ //Check if it is a float
    float fValue = scanner.nextFloat(); //retrive the value directly as float
    System.out.println(fValue + " is a float");
}else{
    String sValue = scanner.next(); //We can not retrive as float
    System.out.println(sValue + " is not a float");
}

使用 System.console

Version >= Java SE 6

String name = System.console().readLine("Please type your name and press Enter%n");

System.out.printf("Hello, %s!", name);

//To read passwords (without echoing as in unix terminal)
char[] password = System.console().readPassword();

优点

  • 阅读方法是同步的
  • 可以使用格式字符串语法

注意 :这仅在程序从实际命令行运行而不重定向标准输入和输出流时才有效。当程序在某些 IDE(例如 Eclipse)中运行时,它不起作用。对于在 IDE 中工作且具有流重定向的代码,请参阅其他示例。