Scanner類是Java中用來對文本進行掃描處理的類。下面我將簡單介紹一下Scanner的使用。
Scanner類雖然有很多的構造器,但總體上來說,大致可以分為如下幾種。
- 處理字符串
處理字符串的構造器只有一個,其聲明如下所示:
<code>public
Scanner
(String source)
;/<code>
使用示例如下:
執行結果如下圖所示:
對於userDelimiter這個方法而言,可以接受的參數為一個字符串形式的正則表達式或一個正則表達式對象。
- 處理字符流
處理字符流的構造器只有一個,其聲明如下所示:
<code>public
Scanner
(Readable source)
; /<code>
其示例代碼如下所示:
執行結果如下圖所示:
- 處理字節流
對於處理字節流的構造器來說有三個,第一個是隻接收字節流,而其餘兩個則是增加了編碼(分別是字符串形式和編碼對象Charset)。
<code>public
Scanner
(InputStream source)
; /<code>
<code>public
Scanner
(InputStream source, String charsetName)
;/<code>
<code>public
Scanner
(InputStream source, Charset charset)
;/<code>
關於字節流的處理我只寫一個例子,其餘兩個大家可以進行類比。
示例代碼如下所示:
執行結果如下圖所示:
由於我的測試文件給類在同一個路徑下,所以我這裡使用了獲取類路徑的方法。其實獲取類路徑的方式大約有三種,分別如下:
第一種方式:
<code>Thread
.currentThread
().getContextClassLoader
().getResource
(""
);/<code>
第二種方式:
<code>ScannerKeyBoardTest
.class
.getClassLoader
().getResource
("").getPath
();/<code>
第三種方式:
<code>ClassLoader
.getSystemClassLoader
().getResource
(""
).getPath
();/<code>
其中第一種方式是最常用的。後兩種如果是在開啟多線程的情況下,可能獲取到的路徑有誤。
- 處理文件
<code>public
Scanner
(File source)
throws
FileNotFoundException;/<code>
<code>public
Scanner
(File source, String charsetName)
throws
FileNotFoundException;/<code>
<code>public
Scanner
(File source, String charsetName)
throws
FileNotFoundException;/<code>
處理文件的例子和上面處理字節流的情況類似,區別在於這裡只能接受文件對象,而上面接受的字節流對象除了是文件流對象外,還可以是別的流對象。
處理文件的示例代碼如下所示:
執行結果如下圖所示:
- 處理指定路徑
<code>public
Scanner
(Path source)
throws
IOException;/<code>
<code>public
Scanner
(Path source, String charsetName)
throws
IOException;/<code>
<code>public
Scanner
(Path source, Charset charset)
throws
IOException;/<code>
處理指定路徑的情況與上面處理文件和字節流類似,只不過構造器中需要接收的參數為Path對象。
示例代碼如下所示:
執行結果如下圖所示:
- 處理指定通道流
<code>public Scanner(ReadableByteChannelsource
);/<code>
<code>public
Scanner(ReadableByteChannel source,String
charsetName);/<code>
<code>public Scanner(ReadableByteChannelsource
, Charset charset);/<code>
處理指定通道流的情況與處理字節流、文件以及Path路徑類似。
示例代碼如下所示:
執行結果如下圖所示:
以上介紹的都是Scanner的各種構造器及其使用方式。
下面我再簡單介紹一下Scanner一些常用的方法。
- useDelimiter:該方法用於設置分隔符或者說讀取文本的截止符,接受參數是一個正則表達式,可以是字符串形式也可以是Pattern對象。
- hasNextXXX:該方法用於判斷是否還有可讀的字符。XXX表示基本數據類型的包裝類、BigDecimal和BigInteger等。
- nextXXX:該方法用於讀取可讀的字符。XXX表示基本數據類型的包裝類、BigDecimal和BigInteger等。
- findAll:該方法用於查看符合正則表達式的要求的數據。入參為一個正則表達式,可以是字符串形式,也可以是Pattern對象。
- findAll方法的使用示例代碼如下:
執行結果如下圖所示:
- skip:該方法用於跳過掃描器開頭的匹配指定正則表達式的信息。說白了,就是使用正則表達式忽略開頭的符合要求的信息。示例代碼如下所示:
執行結果如下圖所示:
- findInLine:該方法是在當前行中查找符合正則表達式的字符。
示例代碼如下:
執行結果如下圖所示:
- delimiter:該方法用於返回該掃描器的分隔符。
示例代碼如下圖所示:
執行結果如下圖所示:
- locale:該方法是返回該掃描器對象的語言環境。
示例代碼如下所示:
執行結果如下圖所示:
- findWithinHorizon:該方法是在當前查找中查找前n(不包括n)個字符中查找符合正則表達式要求的字符。
示例代碼如下圖所示:
執行結果如下圖所示:
自此,Scanner類的使用就已經介紹完畢。