java 中的Scanner

來源:互聯網
上載者:User

標籤:protoc   不同的   proc   equal   完整   位置   標記   逗號   html   

java 中的Scanner(非常詳細不看後悔)

java.util.Scanner是Java5的新特徵,主要功能是簡化文本掃描。這個類最實用的地方表現在擷取控制台輸入,其他的功能都很雞肋,儘管Java API文檔中列舉了大量的API方法,但是都不怎麼地。

一、掃描控制台輸入

這個例子是常常會用到,但是如果沒有Scanner,你寫寫就知道多難受了。
當通過new Scanner(System.in)建立一個Scanner,控制台會一直等待輸入,直到敲斷行符號鍵結束,把所輸入的內容傳給Scanner,作為掃描對象。如果要擷取輸入的內容,則只需要調用Scanner的nextLine()方法即可。

/** 
* 掃描控制台輸入 

* @author leizhimin 2009-7-24 11:24:47 
*/ 
public class TestScanner { 
        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); 
                } 
        } 
}


請輸入字串: 
234 
>>>234 
wer 
>>>wer 
bye 
>>>bye 
exit 

Process finished with exit code 0


先寫這裡吧,有空再繼續完善。

二、如果說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 

Process finished with exit code 0


將注釋行去掉,使用空格或逗號或點號作為分隔字元,輸出結果如下:
123 
asdf 
sd 
45 
789 
sdf 
asdfl 
sdf 
sdfl 
asdf 







asdfkl 

las 

Process finished with exit code 0



四、一大堆API函數,實用的沒幾個

(很多API,注釋很讓人迷惑,幾乎毫無用處,這個類就這樣被糟蹋了,啟了很不錯的名字,實際上做的全是齷齪事)

下面這幾個相對實用:

delimiter() 
          返回此 Scanner 當前正在用於匹配分隔字元的 Pattern。
hasNext() 
          判斷掃描器中當前掃描位置後是否還存在下一段。(原APIDoc的注釋很扯淡)
hasNextLine() 
          如果在此掃描器的輸入中存在另一行,則返回 true。
next() 
          尋找並返回來自此掃描器的下一個完整標記。
nextLine() 
          此掃描器執行當前行,並返回跳過的輸入資訊。


五、漸進式掃描檔案,並逐行輸出

看不到價值的掃描過程
        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()); 
                } 
        }


package own; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.ProtocolException; 
import java.net.URL; 

import com.verisign.uuid.UUID; 

/** 
* @author wangpeng 

*/ 
public class AutoSubmit { 

  /** 
    * @param args 
    * @throws Exception    
    */ 
  public static void main(String[] args) throws Exception { 

附:

Scanner類說明

 

使用Scanner類可以很方面地擷取使用者的鍵盤輸入,Scanner是一個基於Regex的文本掃描器,它可以從檔案、輸入資料流、字串中解析出基本類型值和字串值。Scanner類提供了多個構造器,不同的構造器可接受檔案、輸入資料流、字串作為資料來源,用於從檔案、輸入資料流、字串中解析資料。

Scanner類的常用方法

  • hasNextXXX():是否還有下一個輸入項,其中XXX可以是Int、Long等代表基礎資料型別 (Elementary Data Type)的字串。如果需要判斷是否包含下一個字串,則可以省略XXX。
  • nextXXX():擷取下一個輸入項。XXX的含義與前一個方法中XXX相同。

程式碼範例1

 

Java代碼  
  1. <strong>import java.util.Scanner;  
  2.   
  3.   
  4. public class ScannerKeyBoardTest {  
  5.   
  6.     /** 
  7.      * @param args 
  8.      */  
  9.     public static void main(String[] args) {  
  10.         // System.in代表標準輸入,就是鍵盤輸入  
  11.         Scanner sc = new Scanner(System.in);  
  12.         // 增加下面一行將只把斷行符號作為分隔字元  
  13.         // sc.useDelimiter("\n");  
  14.         // 判斷是否還有下一個輸入項  
  15.         while(sc.hasNext())  
  16.         {  
  17.             // 輸出輸入項  
  18.             System.out.println("鍵盤輸入的內容是:"  
  19.                 + sc.next());  
  20.         }  
  21.   
  22.     }  
  23.   
  24. }</strong>  

 運行結果1

 

hello

鍵盤輸入的內容是:hello

welcome

鍵盤輸入的內容是:welcome

go

 

鍵盤輸入的內容是:go

運行結果2

當去掉sc.useDelimiter("\n");的注釋,運行結果如下:

line 1

鍵盤輸入的內容是:line 1

 

line 2

鍵盤輸入的內容是:line 2

 

line 3

鍵盤輸入的內容是:line 3

 

程式碼範例2

Java代碼  
  1. import java.util.Scanner;  
  2.   
  3.   
  4. public class ScannerLongTest {  
  5.   
  6.     /** 
  7.      * @param args 
  8.      */  
  9.     public static void main(String[] args) {  
  10.         // System.in代表標準輸入,就是鍵盤輸入  
  11.         Scanner sc = new Scanner(System.in);  
  12.         // 判斷是否還有下一個long型整數  
  13.         while(sc.hasNextLong())  
  14.         {  
  15.             // 輸出輸入項  
  16.             System.out.println("鍵盤輸入的內容是:"  
  17.                 + sc.nextLong());  
  18.         }  
  19.   
  20.     }  
  21.   
  22. }  

 運行結果

12

鍵盤輸入的內容是:12

34

鍵盤輸入的內容是:34

56

 

鍵盤輸入的內容是:56

代碼說明

Scanner可以擷取任何基本類型的輸入項目。

 

程式碼範例3

Java代碼  
  1. import java.io.File;  
  2. import java.util.Scanner;  
  3.   
  4.   
  5. public class ScannerFileTest {  
  6.   
  7.   
  8.     public static void main(String[] args) throws Exception {  
  9.         // 將一個File對象作為Scanner的構造器參數,Scanner讀取檔案內容  
  10.         Scanner sc = new Scanner(new File("ScannerFileTest.java"));  
  11.         System.out.println("ScannerFileTest.java檔案內容如下:");  
  12.         // 判斷是否還有下一行  
  13.         while(sc.hasNextLine())  
  14.         {  
  15.             // 輸出檔案中的下一行  
  16.             System.out.println(sc.nextLine());  
  17.         }  
  18.   
  19.     }  
  20.   
  21. }  

 運行結果

F:\java\workspace\first\bin>java ScannerFileTest

ScannerFileTest.java檔案內容如下:

import java.io.File;

import java.io.FileNotFoundException;

import java.util.Scanner;

 

 

public class ScannerFileTest {

 

 

        public static void main(String[] args) throws FileNotFoundException {

                // 將一個File對象作為Scanner的構造器參數,Scanner讀取檔案內容

                Scanner sc = new Scanner(new File("ScannerFileTest.java"));

                System.out.println("ScannerFileTest.java檔案內容如下:");

                // 判斷是否還有下一行

                while(sc.hasNextLine())

                {

                        // 輸出檔案中的下一行

                        System.out.println(sc.nextLine());

                }

 

        }

 

}

代碼說明

此代碼建立Scanner對象時傳入一個File對象作為參數,這表明該程式會讀取ScannerFileTest.java檔案中的內容。此代碼使用了hasNextLine和nextline兩個方法讀取檔案內容。


Java對字串支援還是比較弱的,儘管Java一直在努力。
http://bbs.itheima.com/thread-90856-1-1.html
(出處: 黑馬程式員IT技術論壇)

java 中的Scanner

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.