每天分享技術棧,破解工具等
一、Scnner類
Scnner類在java.util包中一個可以使用正則表達式來解析基本類型和字符串的簡單文本掃描器。public final class Scanner //final修飾。extends Object
implements Iterator
Scanner 使用分隔符模式將其輸入分解為標記,默認情況下該分隔符模式與空白匹配。然後可以使用不同的 next 方法將得到的標記轉換為不同類型的值。
例如,以下代碼使用戶能夠從 System.in 中讀取一個數:
再看一個例子,以下代碼使 long 類型可以通過 myNumbers 文件中的項分配:
掃描器還可以使用不同於空白的分隔符。下面是從一個字符串讀取若干項的例子:
輸出為:
1
2
red
blue
以下代碼使用正則表達式同時解析所有的 4 個標記,並可以產生與上例相同的輸出結果:
掃描操作可能被阻塞,而等待信息的輸入。
next() 和 hasNext() 方法及其基本類型 companion 方法(如 nextInt() 和 hasNextInt())首先跳過與分隔符模式匹配的輸入,然後嘗試返回下一個標記。在等待更多輸入時 hasNext 和 next 方法都可能阻塞。hasNext 方法是否阻塞與其相關的 next 方法是否阻塞無關。
findInLine(java.lang.String)、findWithinHorizon(java.lang.String, int) 和 skip(java.util.regex.Pattern) 方法的執行與分隔符模式無關。這些方法會嘗試匹配與輸入中的分隔符無關的指定模式,因此可用於分隔符無關的特殊環境中。在等待更多輸入時這些方法可能阻塞。
當某一掃描器拋出 InputMismatchException 時,該掃描器不會傳遞導致該異常的標記,因此可以通過其他某種方法來獲取或跳過它。
對於某些類型的分隔模式,可能返回空標記。例如,"\\s+" 模式不會返回空標記,因為它與該分隔符的多個實例匹配。而分隔模式 "\\s" 可能返回空標記,因為它一次只傳遞一個空格。
掃描器可以從實現 Readable 接口的任何對象讀取文本。如果對底層 readable 的 Readable.read(java.nio.CharBuffer) 方法的調用拋出 IOException,則掃描器認為已經到達了輸入的結尾。底層 readable 最新拋出的 IOException 可以通過 ioException() 方法獲取。
如果 Scanner 關閉,且其輸入源實現 Closeable 接口,則該輸入源也將關閉。
若沒有外部同步,則 Scanner 的多線程使用是不安全的。
除非另行說明,否則將一個 null 參數傳遞到 Scanner 的任何一個方法中都將拋出 NullPointerException。
默認情況下掃描器會將數字解釋為十進位形式,除非已經使用 useRadix(int) 方法設置了不同的基數。不管以前是否更改,reset() 方法將把掃描器的基數重置為10 。
構造方法:
構造一個新的 Scanner,它生成的值是從指定源掃描的。
參數:
source -實現 Readable 接口的字符源
構造一個新的 Scanner,它生成的值是從指定的輸入流掃描的。取自該流的字節通過底層平臺的默認字符集轉換成字符。
參數:
source -要掃描的輸入流
構造一個新的 Scanner,它生成的值是從指定的輸入流掃描的。來自該流的字節通過指定字符集轉換成字符。
參數:
source -要掃描的輸入流
charsetName - 用於將來自該流的字節轉換成要掃描的字符的編碼類型
拋出:
IllegalArgumentException - 如果指定字符集不存在
構造一個新的 Scanner,它生成的值是從指定文件掃描的。來自該文件的字節通過底層平臺的默認字符集轉換成字符。
參數:
source -要掃描的文件
拋出:
FileNotFoundException - 如果源文件未找到
構造一個新的 Scanner,它生成的值是從指定文件掃描的。來自該文件的字節通過指定字符集轉換成字符。
參數:
source -要掃描的文件
charsetName - 用於將來自該文件的字節轉換成要掃描的字符的編碼類型
拋出:
FileNotFoundException - 如果源文件未找到
IllegalArgumentException - 如果指定的編碼未找到
構造一個新的 Scanner,它生成的值是從指定字符串掃描的。
參數:
source -要掃描的字符串
構造一個新的 Scanner,它生成的值是從指定信道掃描的。來自該源的字節通過底層平臺的默認字符集轉換成字符。
參數:
source -要掃描的信道
構造一個新的 Scanner,它生成的值是從指定信道掃描的。來自該源的字節通過指定字符集轉換成字符。
參數:
source -要掃描的信道
charsetName - 用於將來自該信道的字節轉換成要掃描的字符的編碼類型
拋出:
IllegalArgumentException - 如果指定字符集不存在
「在看」