Scanner類的簡單使用

Scanner類是Java中用來對文本進行掃描處理的類。下面我將簡單介紹一下Scanner的使用。

Scanner類雖然有很多的構造器,但總體上來說,大致可以分為如下幾種。

  • 處理字符串

處理字符串的構造器只有一個,其聲明如下所示:

<code>

public

Scanner

(String source)

;/<code>

使用示例如下:

Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

​對於userDelimiter這個方法而言,可以接受的參數為一個字符串形式的正則表達式或一個正則表達式對象。

  • 處理字符流

處理字符流的構造器只有一個,其聲明如下所示:

<code>

public

Scanner

(Readable source)

; /<code>

其示例代碼如下所示:


Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

  • 處理字節流

對於處理字節流的構造器來說有三個,第一個是隻接收字節流,而其餘兩個則是增加了編碼(分別是字符串形式和編碼對象Charset)。

<code>

public

Scanner

(InputStream source)

; /<code>
<code>

public

Scanner

(InputStream source, String charsetName)

;/<code>
<code>

public

Scanner

(InputStream source, Charset charset)

;/<code>

關於字節流的處理我只寫一個例子,其餘兩個大家可以進行類比。

示例代碼如下所示:

Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

​由於我的測試文件給類在同一個路徑下,所以我這裡使用了獲取類路徑的方法。其實獲取類路徑的方式大約有三種,分別如下:

第一種方式:

<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>

處理文件的例子和上面處理字節流的情況類似,區別在於這裡只能接受文件對象,而上面接受的字節流對象除了是文件流對象外,還可以是別的流對象。

處理文件的示例代碼如下所示:

Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

  • ​處理指定路徑
<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對象。

示例代碼如下所示:

Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

  • ​處理指定通道流
<code>public Scanner(ReadableByteChannel 

source

);/<code>
<code>

public

Scanner(ReadableByteChannel source,

String

charsetName);/<code>
<code>public Scanner(ReadableByteChannel 

source

, Charset charset);/<code>

處理指定通道流的情況與處理字節流、文件以及Path路徑類似。

示例代碼如下所示:

Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

​以上介紹的都是Scanner的各種構造器及其使用方式。

下面我再簡單介紹一下Scanner一些常用的方法。

  • useDelimiter:該方法用於設置分隔符或者說讀取文本的截止符,接受參數是一個正則表達式,可以是字符串形式也可以是Pattern對象。
  • hasNextXXX:該方法用於判斷是否還有可讀的字符。XXX表示基本數據類型的包裝類、BigDecimal和BigInteger等。
  • nextXXX:該方法用於讀取可讀的字符。XXX表示基本數據類型的包裝類、BigDecimal和BigInteger等。
  • findAll:該方法用於查看符合正則表達式的要求的數據。入參為一個正則表達式,可以是字符串形式,也可以是Pattern對象。
  • findAll方法的使用示例代碼如下:
Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

  • skip:該方法用於跳過掃描器開頭的匹配指定正則表達式的信息。說白了,就是使用正則表達式忽略開頭的符合要求的信息。示例代碼如下所示:
Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

  • ​findInLine:該方法是在當前行中查找符合正則表達式的字符。

示例代碼如下:

Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

  • ​delimiter:該方法用於返回該掃描器的分隔符。

示例代碼如下圖所示:

Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

  • ​locale:該方法是返回該掃描器對象的語言環境。

示例代碼如下所示:

Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

  • ​findWithinHorizon:該方法是在當前查找中查找前n(不包括n)個字符中查找符合正則表達式要求的字符。

示例代碼如下圖所示:

Scanner類的簡單使用

執行結果如下圖所示:

Scanner類的簡單使用

​自此,Scanner類的使用就已經介紹完畢。


分享到:


相關文章: