1. 程式人生 > >java之Scanner詳解

java之Scanner詳解

刷題過程中遇到資料的讀入掃描,發現網上資料比較雜,總結下。

1.包:

import java.util.Scanner

2.使用方法:

Scanner reader=new Scanner(System.in);    

然後reader物件呼叫下列方法(函式),讀取使用者在命令列輸入的各種資料型別:

nextByte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShort()    

注:上面由next()方法轉化而來,空格,TAB快結束

上述方法執行時都會造成堵塞,等待使用者在命令列輸入資料回車確認.

例如,擁護在鍵盤輸入  

12.34,hasNextFloat()的值是true,而hasNextInt()的值是false. NextLine()等待使用者輸入一個文  

本行並且回車,該方法得到一個String型別的資料。相比nextLine()回車確認,按照行讀為string

3.例項

//逐行掃描檔案,並逐行輸出
public static void main(String[] args) throws FileNotFoundException { 
    InputStream in = new FileInputStream(new File("C:\\AutoSubmit.java")); 
    Scanner s = new Scanner(in); 
    while(s.hasNextLine()){ 
            System.out.println(s.nextLine()); 
    } 
}
//all out
import java.util.Scanner;

public class testNextline { 
        public static void main(String[] args) { 
                Scanner s = new Scanner(System.in); 
                System.out.println("請輸入字串:"); 
                while (true) { 
                        String line = s.nextLine(); 
                        if (line.equals("exit")) break; 
                        System.out.println(">>>" + line); 
                } 
        } 
}

//next(), <span style="font-size:18px;">nextByte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShort()  //用法類似</span>
import java.util.Scanner;

public class hasNextInt {

    public static void main(String[] args) {
        Scanner in =  new Scanner(System.in);
        System.out.println("請輸入一個整數");
        while(in.hasNextInt()){
            int num = in.nextInt();
            System.out.println("數字"+num);//輸入123 12只能讀到123
            System.out.println("請輸入一個字串");
            String str = in.next();//輸入 adc cv只能讀到adc
           
            System.out.println("字串"+str);
        }
    }
}

4.其他相關方法 下面這幾個相對實用: delimiter() 
          返回此 Scanner 當前正在用於匹配分隔符的 Pattern。
 public static void main(String[] args) throws FileNotFoundException { 
                Scanner s = new Scanner("123 asda bf 12 123 nh l,sf.fl ...adafafa    lda"); 
//                s.useDelimiter(" |,|\\."); 
                while (s.hasNext()) { 
                        System.out.println(s.next()); 
                } 
        }

123
asda
bf
12
123
nh
l,sf.fl
...adafafa
lda



hasNext() 
          判斷掃描器中當前掃描位置後是否還存在下一段。(原APIDoc的註釋很扯淡)
hasNextLine() 
          如果在此掃描器的輸入中存在另一行,則返回 true。
next() 
          查詢並返回來自此掃描器的下一個完整標記(String)。
nextLine() 
          此掃描器執行當前行,並返回跳過的輸入資訊。
5. 一個讀寫例項
import java.util.Scanner;
public class test{
    public static int getCount(String str,char c){
        int count = 0;
        if(str != null && str.length() > 0){
            for(int i = 0;i < str.length();i++){
                if(c == str.charAt(i)){
                    count++;
                }
            }
        }else{
            count = 0;
        }
        return count;
    }
     
    public static void main(String[] args){
           Scanner s = new Scanner(System.in);
            String str = s.next();
            char c = s.next().charAt(0);
            int i = getCount(str,c);
            System.out.println(i);
    }
}