Scanner用法


先來看一個簡單的例子:
import java.util.*;
public class ScannerTest {

   public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        double a=scanner.nextDouble();
        System.out.println(a);
    }
}
運行
輸入 一個任意數然后輸出這個數

注意粗體字的地方,這一行就實現了從控制台輸入數字的功能,如果要輸入字符串
可以用
String a=scanner.next();//注意不是nextString()

在此簡單介紹一下scanner.next()與scanner.nextline()的區別

a. next

輸入時候遇到空格回車TAP等結束符自動忽略直到遇到可讀字符,遇到可讀字符后再遇到結束符時自動判定讀取完畢

b. 結束方法只有回車,也就是說之前輸入無論是什么都會被讀進去

PS:nextdouble nextint等 都和next讀取性質一樣

Scanner還可以直接掃描文件。比如(有點長,耐心一點):
import java.util.*;
import java.io.*;
public class ScannerTest {
    public static void main(String[] args) throws IOException{//這里涉及到文件io操作
        double sum=0.0;
        int count=0;
        FileWriter fout=new FileWriter("text.txt");
        fout.write("2 2.2 3 3.3 4 4.5 done");//往文件里寫入這一字符串
        fout.close();
        FileReader fin=new FileReader("text.txt");
        Scanner scanner=new Scanner(fin);//注意這里的參數是FileReader類型的fin
        while(scanner.hasNext()){//如果有內容
            if(scanner.hasNextDouble()){//如果是數字
                sum=sum+scanner.nextDouble();
                count++;
            }else{
                String str=scanner.next();
                if(str.equals("done")){
                    break;
                }else{
                    System.out.println("文件格式錯誤!");
                    return;
                }
            }
        }
        fin.close();
        System.out.println("文件中數據的平均數是:"+sum/count);
    }
}
結果輸出文件中數據的平均數是:3.1666666666666665
這段程序的功能是將"2 2.2 3 3.3 4 4.5 done"寫入文件scanner讀取文件中的數直到done結束。並求出數字的平均值,比較有意思的是scanner會自動一空格作為分割符區分不同數字。當然也可以通過scanner.useDelimiter(Pattern pattern)來設置不同的分割符,比如 scanner.useDelimiter(",*");
===========================================================================================================

Java代碼
   1. java.util.Scanner的總結 
   2. //構造方法(常用的三個) 
   3. //Scanner(File source) 
   4. //Scanner(InputStream source) 
   5. //Scanner(String source) 
   6.  
   7. //對比兩種方式的比較 
   8. //Scanner sc=new Scanner(System.in);  
   9. //BufferedReader br=new BufferedReader(new InputStreamReader(System.in))  
  10.  
  11. //方法 
  12. //useDelimiter(Pattern pattern)改變token的分割方式,默認的是空格,傳Pattern對象 
  13. //useDelimiter(String pattern)改變token的分割方式,默認的是空格,傳String 
  14.  
  15. //hasNext();查看是否有token的分割段 
  16. //hasNextInt();查看是否有int類型的token的分割段 
  17. //nextInt();返回下一個int的數值 
  18. //nextLine();返回一行 
  19.  
  20. //hasNext(Pattern pattern);返回下一個pattern類型的token 
  21.  
  22. public class ScannerTest { 
  23.     public static void main(String[] args){ 
  24.         String str = "1.1 22.2 s 4 5.3 6 7.5 8 9"; 
  25.         Scanner scanner = new Scanner(str); 
  26.         //scanner.useDelimiter("\\."); 
  27.         while(scanner.hasNext()){ 
  28.             if(scanner.hasNext(Pattern.compile("\\d\\.\\d"))){ 
  29.                 System.out.println(scanner.next()); 
  30.             }else{ 
  31.                 scanner.next();//要調用一下next()相關的方法才會到下一個token 
  32.             } 
  33.         }            
  34.     } 
  35. } 
  36.  
  37. 結果: 
  38. 1.1 
  39. 5.3 
  40. 7.5 
  41.  
  42.  
  43. public class ScannerTest { 
  44.     public static void main(String[] args){ 
  45.         String str = "1.2 s.4 5 6.7 8 9"; 
  46.         Scanner scanner = new Scanner(str); 
  47.                   //token以.分割 
  48.         scanner.useDelimiter("\\."); 
  49.         while(scanner.hasNext()){ 
  50.             System.out.println(scanner.next()); 
  51.         }            
  52.     } 
  53. } 

 

最后說明一下,在java開發中基本很少用到Scanner,因為不需要動態輸入一個數

轉載至:http://blog.sina.com.cn/s/blog_7014ad5c01018sov.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM