java中獲取控制檯輸入的兩種方式
第一種方式:比較傳統的方式,得到字串後要另行判斷、轉換
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class MainRun { /** * @param args */ public static void main(String[] args) { try { <span style="color:#ff0000;">BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));</span> System.out.print("請輸入一個字串:"); <span style="color:#ff0000;">String str = strin.readLine(); </span> System.out.println("第一個:"+str); System.out.println("請輸入第二個字串:"); <span style="color:#ff0000;"> String str2 = strin.readLine();</span> System.out.println("第2個:"+str2); } catch (IOException e) { e.printStackTrace(); } } }
第二種方式:利用Scanner JDK5以後引入了java.util.Scanner;來處理控制檯輸並得到相應的資料型別
import java.util.Scanner; public class MainRun { /** * @param args */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("輸入第一個boolean值(true/false):"); if(sc.nextBoolean()){ System.out.println("輸入布林:真的"); }else{ System.out.println("輸入布林:假的"); } System.out.println("輸入第一個數字:"); System.out.println("輸入數字:"+sc.nextInt()); System.out.println("輸入一個字串:"); System.out.println("輸入字串:"+sc.next()); System.out.println("輸入一個長整型:"); System.out.println("輸入長整型:"+sc.nextLong()); } }
java.util.Scanner是Java5的新特徵,主要功能是簡化文字掃描。這個類最實用的地方表現在獲取控制檯輸入。
一、掃描控制檯輸入
這個例子是常常會用到的,但是如果沒有Scanner,寫起來非常不方便。
當通過new Scanner(System.in)建立一個Scanner,控制檯會一直等待輸入,直到敲回車鍵結束,把所有輸入的內容傳給Scanner,作為掃描物件。如果要獲取輸入的內容,則只需要呼叫Scanner的nextLine()方法即可。
import java.util.Scanner; /** * 掃描控制檯輸入 * @author mhy * */ public class TestScanner { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("請輸入字串:"); while(true) { String lin = s.nextLine(); if(lin.equals("exit")) break; System.out.println(">>>" + lin); } } }
請輸入字串:
asd
>>>asd
sdff
>>>sdff
exit
二、如果說Scanner使用簡便,不如說Scanner的構造器支援多種方式,構建Scanner的物件很方便。
可以從字串(Readable)、輸入流、檔案等等來直接構建Scanner物件,有了Scanner,就可以逐段(根據正則分隔式)來掃描整個文字,並對掃描後的結果做想要的處理。
三、Scanner預設使用空格作為分割符來分隔文字,但允許你指定新的分隔符
使用預設的空格分隔符:
public static void main(String[] args) throws FileNotFoundException
{
Scanner s = new Scanner("123 asdf sd 45 789 sdf asdfl,sdf.sdfl,asdf ......asdfkl las");
// s.useDelimiter(" |,|\\.");
while (s.hasNext()) {
System.out.println(s.next());
}
}
123
asdf
sd
45
789
sdf
asdfl,sdf.sdfl,asdf
......asdfkl
las
使用自定義的分隔符
public class TestScanner {
public static void main(String[] args) {
Scanner s = new Scanner(
"123 asdf sd 45 789 sdf asdfl,sdf.sdfl,asdf ......asdfkl las");
<span style="color:#ff0000;">s.useDelimiter(" |,|\\.");</span>
while (s.hasNext()) {
System.out.println(s.next());
}
}
}
輸出結果如下:
123
asdf
sd
45
789
sdf
asdfl
sdf
sdfl
asdf
asdfkl
las
四、常用的API函式
delimiter()
返回此 Scanner 當前正在用於匹配分隔符的 Pattern。
hasNext()
判斷掃描器中當前掃描位置後是否還存在下一段。(原APIDoc的註釋很扯淡)
hasNextLine()
如果在此掃描器的輸入中存在另一行,則返回 true。
next()
查詢並返回來自此掃描器的下一個完整標記。
nextLine()
此掃描器執行當前行,並返回跳過的輸入資訊。