Scanner 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。
[Android.Runtime.Register("java/util/Scanner", DoNotGenerateAcw=true)]
public sealed class Scanner : Java.Lang.Object, IDisposable, Java.IO.ICloseable, Java.Util.IIterator
[<Android.Runtime.Register("java/util/Scanner", DoNotGenerateAcw=true)>]
type Scanner = class
inherit Object
interface ICloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface IIterator
- 繼承
- 屬性
- 實作
備註
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。
A Scanner 會使用分隔符模式將輸入拆分成符號,預設與空白符相匹配。 所得的代幣可透過各種 next 方法轉換成不同類型的值。
例如,這段程式碼允許使用者從 : System.inblockquote 讀取一個數字<>
{@code
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
}
</區塊引用>
再舉一個例子,這段程式碼允許 long 從檔案 myNumbers中的條目 : <blockquote 指派型別>
{@code
Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
long aLong = sc.nextLong();
}
}
</區塊引用>
掃描器也可以使用除空白以外的分隔符。 此範例從字串中讀取多個項目: <blockquote>
{@code
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
}
</區塊引用>
輸出如下: <Blockquote>
{@code
1
2
red
blue
}
</區塊引用>
同樣的輸出也可用此程式碼產生,該程式碼使用正則表達式一次解析所有四個標記: <blockquote>
{@code
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input);
s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
MatchResult result = s.match();
for (int i=1; i<=result.groupCount(); i++)
System.out.println(result.group(i));
s.close();
}
</區塊引用>
掃描器使用的「預設分隔符」>預設空白分隔符為 Character#isWhitespace(char) Character.isWhitespace()。 此 #reset reset() 方法會將掃描器分隔符的值重設為預設空白分隔符,無論該分隔符是否先前被更改。
掃描操作可能會阻擋等待輸入。
#next與#hasNext方法及其伴隨方法(如 #nextInt 和#hasNextInt)首先跳過任何符合分隔符模式的輸入,然後嘗試返回下一個標記。 兩者 hasNext() 和 next() 方法都可能阻擋等待進一步輸入。 一個方法是否 hasNext() 阻塞,與其對應 next() 的方法是否會阻塞無關。 此 #tokens 方法也可能阻擋等待輸入。
這些 #findInLine findInLine()、 #findWithinHorizon findWithinHorizon()、 #skip skip()和 #findAll findAll() 方法獨立於分隔符模式運作。 這些方法會嘗試匹配指定的模式,不考慮輸入中的分隔符,因此可用於不需分隔符的特殊情況。 這些方法可能會阻擋等待更多輸入。
當掃描器拋出 , InputMismatchException掃描器不會傳遞造成異常的標記,因此可以透過其他方法擷取或跳過該標記。
根據分界模式的類型,可能會回傳空標記。 例如,該模式 "\\s+" 不會回傳任何空標記,因為它匹配多個分隔符實例。 分隔模式 "\\s" 可能會回傳空白標記,因為它一次只傳遞一個空格。
掃描器可以讀取任何實作該 java.lang.Readable 介面物件的文字。 若呼叫底層可 java.lang.Readable#read read() 讀方法拋出 , java.io.IOException 則掃描器假設已到達輸入的終點。 底層可讀物最近拋出的結果 IOException 可透過該 #ioException 方法取得。
當 a Scanner 閉合時,若源實 java.io.Closeable 作介面,則會關閉輸入來源。
Scanner A 在沒有外部同步的情況下不適合多執行緒使用。
除非另有說明,將參數傳 null 入 a Scanner 的任何方法都會導致拋出 a NullPointerException 。
掃描器會預設將數字解讀為十進位,除非使用該 #useRadix 方法設定了不同的基數。 此 #reset 方法會將掃描器的基數值重置為 10 不論先前是否更改過。
<h2> 「localized-numbers」>本地化數字</h2>
此類實例能掃描標準格式及掃描器所在區域格式的數字。 掃描器的「初始區域」>初始區域是方法回傳 java.util.Locale#getDefault(Locale.Category) Locale.getDefault(Locale.Category.FORMAT) 的值;可透過 #useLocale useLocale() 方法更改。 此 #reset 方法會將掃描器位置的值重設回初始位置,無論該位置是否先前被更改。
本地化格式以以下參數定義,針對特定區域,這些參數取自該區域的java.text.DecimalFormat DecimalFormat物件、 df及其與java.text.DecimalFormatSymbols DecimalFormatSymbols物件。 dfs
<blockquote><dl><dt>LocalGroupSeparator <dd>用來分隔數千個群組的字元, 即,nbsp;dfs.java.text.DecimalFormatSymbols#getGroupingSeparator getGroupingSeparator()<dt>LocalDecimalSeparator <dd>用於小數點的字元, 即 nbsp;dfs.java.text.DecimalFormatSymbols#getDecimalSeparator getDecimalSeparator()<dt LocalPositivePrefix> <dd>出現在正數之前的字串(可能為空), 即, df.java.text.DecimalFormat#getPositivePrefix getPositivePrefix()<dt LocalPositiveSuffix> <dd>出現在正數之後的字串(可能為空), 即 ;df.java.text.DecimalFormat#getPositiveSuffix getPositiveSuffix()<dt LocalNegativePrefix> <dd>出現在負數之前的字串(可能為空), 即 df.java.text.DecimalFormat#getNegativePrefix getNegativePrefix()<dt LocalNegativeSuffix> <dd>出現在負數之後的字串(可能為空), 即 ;df.java.text.DecimalFormat#getNegativeSuffix getNegativeSuffix()<dt 地方>NaN <dd>代表浮點數值非數字的字串, 即 dfs.java.text.DecimalFormatSymbols#getNaN getNaN()<dt LocalInfinity> <dd>代表浮點數無限大的字串, 即 dfs.java.text.DecimalFormatSymbols#getInfinity getInfinity()</dl></blockquote>
<h3> 「數字語法」>數字語法</h3>
可由此類實例解析為數字的字串,依以下正則表達式文法指定,其中 Rmax 是所用基數中最高的數字(例如 Rmax 在 10 進制中為 9)。
<dl><dt>NonAsciiDigit: <dd>一個非ASCII字元c,回 java.lang.Character#isDigit Character.isDigit(c) 傳s 沒錯
<dt>非0位數:<dd >[1-] |<>dt< 數字:>dd[0-] |<>dt<數:>dd( 非0位數??<> ( LocalGroupSesolator數字數字)+ )<數字 數字 dt>數詞: <dd>( (數字+ ) |GroupedNumeral)<dt>“Integer-regex”><i>Integer</i>:<dd>( [-+]? (數) )<詞 dd>|LocalPositivePrefixnumeralLocalPositiveSuffix<dd>|LocalNegativePrefixNumeralLocalNegativeSuffix<dt>DecimalNumeral: <dd><>dd|NumeralLocalDecimalSesolator*<>dd|LocalDecimalSesolator digit +<>dt<: >dd( [eE] [+-]?Digit+ )<dt>“Decimal-regex”><i>Decimal</i>:<dd>( [-+]?小數指數? )<dd>|LocalPositivePrefixDecimalLocalPositiveSuffixExponent?<dd>|LocalNegativePrefixDecimalLocalNegativeSuffixExponent?<dt>HexFloat: <dd>[-+]? 0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+ ([pP][-+]?[0-9]+)?<dt> NonNumber: <dd>NaN | LocalNan | Infinity |LocalInfinity<dt>SignedNonNumber: <dd>( [-+]?nonnumber)<dd>|nonNumberLocalPositiveSuffix<dd>|LocalNegativePrefixnonNumberLocalNegativeSuffix<dt>“Float-regex”><i>float</i>: <dd>十進位|十六進制Float|SignedNonNumber</dl>
上述正則表達式中空白空間不顯著。
已在1.5中新增。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| Scanner(File, Charset) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 |
| Scanner(File, String) |
建構一個新檔案 |
| Scanner(File) |
建構一個新檔案 |
| Scanner(IPath, Charset) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 |
| Scanner(IPath, String) |
建構一個新檔案 |
| Scanner(IPath) |
建構一個新檔案 |
| Scanner(IReadable) |
建構一個新資料 |
| Scanner(IReadableByteChannel, Charset) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 |
| Scanner(IReadableByteChannel, String) |
建立一個新版本 |
| Scanner(IReadableByteChannel) |
建立一個新版本 |
| Scanner(Stream, Charset) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 |
| Scanner(Stream, String) |
建構一個新資料 |
| Scanner(Stream) |
建構一個新資料 |
| Scanner(String) |
構造一個新值 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| HasNext |
如果該掃描器輸入中有其他標記,則回傳為真。 |
| HasNextBigDecimal |
如果掃描器輸入中的下一個標記能被解讀為使用 該 |
| HasNextBigInteger |
若掃描器輸入中的下一個標記能透過該 |
| HasNextBoolean |
若掃描器輸入中的下一個標記能以大小寫不區分的模式(由字串「true|false」建立)解讀為布林值,則回傳真。 |
| HasNextByte |
若掃描器輸入中的下一個標記能以該方法解讀為預設基數 |
| HasNextDouble |
若掃描器輸入中的下一個標記可用該 |
| HasNextFloat |
若掃描器輸入中的下一個標記可用該方法解讀為浮點數值 |
| HasNextInt |
若掃描器輸入中的下一個標記能透過該 |
| HasNextLine |
如果掃描器輸入中還有另一行,則會回傳為真。 |
| HasNextLong |
若掃描器輸入中的下一個標記能被解讀為預設基數中的長值,則 |
| HasNextShort |
若掃描器輸入中的下一個標記能透過該 |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| JniPeerMembers |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 Object) |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 Object) |
方法
| 名稱 | Description |
|---|---|
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Close() |
關閉掃描器。 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| Delimiter() |
回傳 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| Equals(Object) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| FindInLine(Pattern) |
嘗試尋找指定模式的下一次出現,忽略分隔符。 |
| FindInLine(String) |
嘗試尋找由指定字串構成的模式的下一次出現,忽略分隔符。 |
| FindWithinHorizon(Pattern, Int32) |
嘗試尋找指定模式的下一次出現。 |
| FindWithinHorizon(String, Int32) |
嘗試尋找由指定字串構成的模式的下一次出現,忽略分隔符。 |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| InvokeHasNext(Pattern) |
若下一個完整標記符合指定模式,則返回為真。 |
| InvokeHasNext(String) |
若下一個標記與由指定字串構造的模式相符,則回傳為真。 |
| InvokeHasNextBigInteger(Int32) |
若掃描器輸入中的下一個符號能被解讀為指定基數中的 a |
| InvokeHasNextByte(Int32) |
若掃描器輸入中的下一個標記能透過該 |
| InvokeHasNextInt(Int32) |
若掃描器輸入中的下一個標記能透過該 |
| InvokeHasNextLong(Int32) |
若掃描器輸入中的下一個符號能被解讀為指定基數 |
| InvokeHasNextShort(Int32) |
若掃描 |
| IoException() |
回傳 |
| JavaFinalize() |
已淘汰.
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| Locale() |
回傳此掃描器的位置。 |
| Match() |
回傳該掃描器最後一次掃描操作的匹配結果。 |
| Next() |
從掃描器中找到並返回下一個完整的標記。 |
| Next(Pattern) |
如果下一個標記符合指定模式,則回傳該標記。 |
| Next(String) |
如果下一個標記符合由指定字串構建的模式,則回傳該標記。 |
| NextBigDecimal() |
掃描輸入的下一個標記為 |
| NextBigInteger() |
掃描輸入的下一個標記為 |
| NextBigInteger(Int32) |
掃描輸入的下一個標記為 |
| NextBoolean() |
將輸入的下一個標記掃描成布林值並回傳該值。 |
| NextByte() |
掃描輸入的下一個標記為 |
| NextByte(Int32) |
掃描輸入的下一個標記為 |
| NextDouble() |
掃描輸入的下一個標記為 |
| NextFloat() |
掃描輸入的下一個標記為 |
| NextInt() |
掃描輸入的下一個標記為 |
| NextInt(Int32) |
掃描輸入的下一個標記為 |
| NextLine() |
將掃描器推進至當前線路,並回傳跳過的輸入。 |
| NextLong() |
掃描輸入的下一個標記為 |
| NextLong(Int32) |
掃描輸入的下一個標記為 |
| NextShort() |
掃描輸入的下一個標記為 |
| NextShort(Int32) |
掃描輸入的下一個標記為 |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| Radix() |
回傳此掃描器的預設基數。 |
| Remove() |
移除操作未被此實作 |
| Reset() |
重置掃描器。 |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| Skip(Pattern) |
跳過符合指定模式的輸入,忽略分隔符。 |
| Skip(String) |
跳過與指定字串構成模式相符的輸入。 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| UseDelimiter(Pattern) |
將此掃描器的分界模式設定為指定的模式。 |
| UseDelimiter(String) |
將此掃描器的分界模式設定為由指定的 |
| UseLocale(Locale) |
將掃描器的位置設定為指定的地點。 |
| UseRadix(Int32) |
將此掃描器的預設基數設為指定的基數。 |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IIterator.Next() |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 |
| IJavaPeerable.Disposed() |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 (繼承來源 JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
一個簡單的文字掃描器,能用正則表達式解析原始型態和字串。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |