3.7.1 讀取輸入
阿新 • • 發佈:2018-12-15
前面已經看到,列印輸出到“標準輸出流”(即控制檯視窗)是一件廢話從那個容易的事情,只要呼叫System.out.println即可。然而,讀取“標準輸入”System.in就沒那麼簡單了。要想通過控制檯進行輸入,首先需要構造一個Scanner物件,並與“標準輸入流”System.in關聯。
Scanner in= new Scanner(System.in);
現在,就可以使用Scanner類的各種方法實現輸入操作了。例如,nextLine方法將輸入一行。
import java.util.Scanner;
System.out.println("What's your name ?");
Scanner in = new Scanner(System.in);
String s = in.nextLine();
System.out.println(s);
在這裡,使用nextLine方法是因為在輸入行中有可能包含空格。想要讀取一個單詞(以空白符作為分隔符),就呼叫
String firstName = in.next() ;
要想讀取一個證書,就用nextInt方法。
int age = in.nextInt();
於此類似,要想讀取下一個浮點數,就呼叫nextDouble方法。
在程式清單3-2的程式中,詢問使用者姓名和年齡,然後列印一條如下格式的訊息:
Hello, Cay Next year, you'll be 57
System.out.println("What's your name ?");
Scanner in = new Scanner(System.in);
String name = in.nextLine();
int age = in.nextInt();
System.out.println("Hello"+", "+name+", "+"Next year"+", you'll be "+(age+1));
//What's your name ?
//Mark
//28
//Hello, Mark, Next year, you'll be 29
最後,需要注意的是 Scanner類定義在java.util包中。當使用的類不是定義在基本java.lang包中時,一定要使用import指示符將相應的包載入進來。有關包與import指示字的詳細描述在下章。
因為輸入時可見的,所以Scanner類不適用於從控制檯讀取密碼。Java SE 6特別引入了Console類實現這個目的。要想讀取一個密碼,可以採用下列程式碼:
Console cons = System.console();
String username = cons.readLine("User name: ");
char[] passwd = cons.readPassword("Password: ");
Console cons = System.console();
String username = cons.readLine("User name: ");
char[] passwd = cons.readPassword();
System.out.println("Username:" + username + " Password:" + passwd);
java.util.Arrays.fill(passwd, ' ');
System.out.println(cons);
System.console() returns null if there is no console.
java.util.Scanner 5.0
java.lang.System
static Console console()
如果有可能進行互動操作,就通過控制檯視窗為互動的使用者返回一個Console物件,否則返回null。對於任何一個通過控制檯視窗啟動的程式,都可使用Console物件。否則,其可用性將與所使用的系統有關。
java.io.Console
static char[] readPasswrod(String prompt,object...args)
static String readLine(String prompt, object...args)
顯示字串prompt並且讀取使用者輸入,直到輸入結束。args引數可以用來提供輸入格式。
方法名 | 返回型別 | 說明 |
Scanner(InputStream in) | 用給定的輸入流建立一個Scanner物件 | |
nextLine() | String | 讀取輸入的下一行內容 |
next() | String | 讀取輸入的下一個單詞(以空格作為分隔符) |
nextInt() | int | 讀取一個整型數字 |
nextDouble() | double | 讀取並轉換下一個表示整數或浮點數的字元序列 |
hasNext() | boolean | 檢測輸入中是否還有其他單詞 |
hasNextInt() | boolean | 檢測輸入中是否還有其他整數 |
hasNextDouble() | boolean | 檢測輸入中是否還有其他浮點數 |