當在文字模式下要輸入資料至程式中時,您可以使用標準輸入串流物件System.in,然而我們很少直接使用它,因為System.in物件所提供的 read()方法,是從輸入串流取得一個位元組的資料,並傳回該位元組的整數值。
在文字模式下的輸入是以字元的方式傳送給程式,所以直接使用read()方法取得的是字元的ASCII編碼整數,通常要取得的使用者輸入 會是一個字串,或是一組數字,所以 System.in物件的read()方法一次只讀入一個位元組資料的方式並不適用。
在
中,您可以使用java.util.Scanner取 得使用者的輸 入。
java.util指的是套件(package)層級,java.util.Scanner表示Scanner這個類別是位於java/util這樣的階 層之下,現階段您可以將這個階層想像為類似檔案管理的目錄(資料夾)階層。
直接先來看如何取得使用者的輸入字串:
import java.util.Scanner;
public class UserInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Please input your name: ");
System.out.printf("Hello! %s!", scanner.next());
}
}
執行結果:
Please input your name: caterpillar Hello! caterpillar! |
解釋一下程式,java.util套件是J2SE 5.0的標準套件,編譯器會知道到哪去找這個套件,您使用"import"是在告訴編譯器,您將使用 java.util下的 Scanner類別。
"new"表示新增一個 Scanner物件,在新增一個 Scanner物件時需要一個System.in物件,因為實際上還是System.in在取得使用者的輸入,您可以將Scanner看作是 System.in物件的支援者,System.in取得使用者輸入之後,交給Scanner作一些處理(實際上,這是
的一個應用)。
簡單的說,您告訴執行環境新增一個Scanner物件,然後使用它的next()方法來取得使用者的輸入字串,如果要取得數字呢?您可以使用 Scanner物件的nextInt()方法,例如:
import java.util.Scanner;
public class UserInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Please input a number: ");
System.out.printf("Oh! I get %d!!",
scanner.nextInt());
}
}
nextInt()會將試著取得的字串轉換為int整數,看看執行結果:
Please input a number: 100 Oh! I get 100!! |
同樣的,您還可以使用Scanner的nextFloat()、nextBoolean()等方法來取得使用者的輸入,並轉換為正確的 資料型態。
要注意的是,Scanner的next()取得輸入的依據是空白字元,舉凡按下空白鍵、tab鍵或是enter鍵,Scanner就會傳回下一個輸入,如果您想要取得包 括空白字元的輸入,可以使用nextLine()方法,或是 使用 BufferedReader 類別取得輸入。
資料來源:http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/UserInput.htm