從控制檯讀取使用者輸入

使用 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 中工作且具有流重定向的程式碼,請參閱其他示例。