1. 程式人生 > >java中獲取控制檯輸入的兩種方式

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() 
          此掃描器執行當前行,並返回跳過的輸入資訊。