JavaTM 2 Platform
Standard Ed. 6

java.util
類別 Scanner

java.lang.Object
  繼承者 java.util.Scanner
所有已實作的介面:
Iterator<String>

public final class Scanner
extends Object
implements Iterator<String>

一個可以使用正則表達式來解析基本型別和字元串的簡單文本掃瞄器。

Scanner 使用分隔符網要將其輸入分解為標記,預設情況下該分隔符網要與空白比對。然後可以使用不同的 next 方法將得到的標記轉換為不同型別的值。

例如,以下程式碼使使用者能夠從 System.in 中讀取一個數:

     Scanner sc = new Scanner(System.in);
     int i = sc.nextInt();
 

再看一個例子,以下程式碼使 long 型別可以通過 myNumbers 檔案中的項分派:

      Scanner sc = new Scanner(new File("myNumbers"));
      while (sc.hasNextLong()) {
          long aLong = sc.nextLong();
      }

掃瞄器還可以使用不同於空白的分隔符。下面是從一個字元串讀取若干項的例子:

     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(); 

輸出為:

     1
     2
     red
     blue 

以下程式碼使用正則表達式同時解析所有的 4 個標記,並可以產生與上例相同的輸出結果:

     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 來識別。不管以前是否更改,reset() 方法將把掃瞄器分隔符的值重置為預設空白分隔符。

掃瞄操作可能被阻塞,而等待資訊的輸入。

next()hasNext() 方法及其基本型別 companion 方法(如 nextInt()hasNextInt())首先跳過與分隔符網要比對的輸入,然後嘗試返回下一個標記。在等待更多輸入時 hasNextnext 方法都可能阻塞。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

本地化數字

此類別的一個實例能夠以標準格式以及掃瞄器語言環境的格式掃瞄數字。掃瞄器的 初始語言環境 Locale.getDefault() 方法返回的值;它可以通過 useLocale(java.util.Locale) 方法更改。不管以前是否更改,reset() 方法將把掃瞄器的語言環境重置為初始語言環境。

本地化格式是根據以下參數定義的,對於某一特定語言環境來說,這些參數取自該語言環境的 DecimalFormat 物件 df,及其 DecimalFormatSymbols 物件 dfs

LocalGroupSeparator   用於分隔數千個組的字元, dfs.getGroupingSeparator()
LocalDecimalSeparator   用於小數點的字元, dfs.getDecimalSeparator()
LocalPositivePrefix   出現在正數前的字元串(可以為空), df.getPositivePrefix()
LocalPositiveSuffix   出現在正數後的字元串(可以為空), df.getPositiveSuffix()
LocalNegativePrefix   出現在負數前的字元串(可以為空), df.getNegativePrefix()
LocalNegativeSuffix   出現在負數後的字元串(可以為空), df.getNegativeSuffix()
LocalNaN   表示浮點值的非數字的字元串, dfs.getNaN()
LocalInfinity   表示浮點值的無窮大的字元串, dfs.getInfinity()

數字語法

可通過此類別的一個實例解析為數字的字元串是根據以下正則表達式語法指定的,在這種情況下 Rmax 是正在使用的進制中的最高數字(例如,在進制 10 中 Rmax 為 9)。

NonASCIIDigit  :: = 非 ASCII 字元 c,對於它,Character.isDigit(c) 返回 true
 
Non0Digit  :: = [1-Rmax] | NonASCIIDigit
 
Digit  :: = [0-Rmax] | NonASCIIDigit
 
GroupedNumeral  ::
= (  Non0Digit Digit? Digit?
LocalGroupSeparator Digit Digit Digit )+ )
 
Numeral  :: = ( ( Digit+ ) | GroupedNumeral )
 
Integer  :: = ( [-+]? ( Numeral ) )
| LocalPositivePrefix Numeral LocalPositiveSuffix
| LocalNegativePrefix Numeral LocalNegativeSuffix
 
DecimalNumeral  :: = Numeral
| Numeral LocalDecimalSeparator Digit*
| LocalDecimalSeparator Digit+
 
Exponent  :: = ( [eE] [+-]? Digit+ )
 
Decimal  :: = ( [-+]? DecimalNumeral Exponent? )
| LocalPositivePrefix DecimalNumeral LocalPositiveSuffix Exponent?
| LocalNegativePrefix DecimalNumeral LocalNegativeSuffix Exponent?
 
HexFloat  :: = [-+]? 0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+ ([pP][-+]?[0-9]+)?
 
NonNumber  :: = NaN | LocalNan | Infinity | LocalInfinity
 
SignedNonNumber  :: = ( [-+]? NonNumber )
| LocalPositivePrefix NonNumber LocalPositiveSuffix
| LocalNegativePrefix NonNumber LocalNegativeSuffix
 
Float  :: = Decimal
| HexFloat
| SignedNonNumber

上面正則表達式中的空白沒有意義。

從以下版本開始:
1.5

建構子摘要
Scanner(File source)
          建構一個新的 Scanner,它產生的值是從指定檔案掃瞄的。
Scanner(File source, String charsetName)
          建構一個新的 Scanner,它產生的值是從指定檔案掃瞄的。
Scanner(InputStream source)
          建構一個新的 Scanner,它產生的值是從指定的輸入串流掃瞄的。
Scanner(InputStream source, String charsetName)
          建構一個新的 Scanner,它產生的值是從指定的輸入串流掃瞄的。
Scanner(Readable source)
          建構一個新的 Scanner,它產生的值是從指定源掃瞄的。
Scanner(ReadableByteChannel source)
          建構一個新的 Scanner,它產生的值是從指定通道掃瞄的。
Scanner(ReadableByteChannel source, String charsetName)
          建構一個新的 Scanner,它產生的值是從指定通道掃瞄的。
Scanner(String source)
          建構一個新的 Scanner,它產生的值是從指定字元串掃瞄的。
 
方法摘要
 void close()
          關閉此掃瞄器。
 Pattern delimiter()
          返回此 Scanner 當前正在用於比對分隔符的 Pattern
 String findInLine(Pattern pattern)
          試圖在忽略分隔符的情況下尋找下一個指定網要。
 String findInLine(String pattern)
          試圖在忽略分隔符的情況下尋找下一個從指定字元串建構的網要。
 String findWithinHorizon(Pattern pattern, int horizon)
          試圖尋找下一個指定網要。
 String findWithinHorizon(String pattern, int horizon)
          試圖在忽略分隔符的情況下尋找下一個從指定字元串建構的網要。
 boolean hasNext()
          如果此掃瞄器的輸入中有另一個標記,則返回 true。
 boolean hasNext(Pattern pattern)
          如果下一個完整標記與指定網要比對,則返回 true。
 boolean hasNext(String pattern)
          如果下一個標記與從指定字元串建構的網要比對,則返回 true。
 boolean hasNextBigDecimal()
          如果通過使用 nextBigDecimal() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 BigDecimal,則返回 true。
 boolean hasNextBigInteger()
          如果通過使用 nextBigInteger() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 BigInteger 值,則返回 true。
 boolean hasNextBigInteger(int radix)
          如果通過使用 nextBigInteger() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個 BigInteger 值,則返回 true。
 boolean hasNextBoolean()
          如果通過使用一個從字元串 "true|false" 創建的大小寫敏感的網要,此掃瞄器輸入資訊中的下一個標記可以解釋為一個布林值,則返回 true。
 boolean hasNextByte()
          如果通過使用 nextByte() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個位元組值,則返回 true。
 boolean hasNextByte(int radix)
          如果通過使用 nextByte() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個位元組值,則返回 true。
 boolean hasNextDouble()
          如果通過使用 nextDouble() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 double 值,則返回 true。
 boolean hasNextFloat()
          如果通過使用 nextFloat() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 float 值,則返回 true。
 boolean hasNextInt()
          如果通過使用 nextInt() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 int 值,則返回 true。
 boolean hasNextInt(int radix)
          如果通過使用 nextInt() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個 int 值,則返回 true。
 boolean hasNextLine()
          如果在此掃瞄器的輸入中存在另一行,則返回 true。
 boolean hasNextLong()
          如果通過使用 nextLong() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 long 值,則返回 true。
 boolean hasNextLong(int radix)
          如果通過使用 nextLong() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個 long 值,則返回 true。
 boolean hasNextShort()
          如果通過使用 nextShort() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 short 值,則返回 true。
 boolean hasNextShort(int radix)
          如果通過使用 nextShort() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個 short 值,則返回 true。
 IOException ioException()
          返回此 Scanner 的底層 Readable 最後拋出的 IOException
 Locale locale()
          返回此掃瞄器的語言環境。
 MatchResult match()
          返回此掃瞄器所執行的最後掃瞄操作的比對結果。
 String next()
          尋找並返回來自此掃瞄器的下一個完整標記。
 String next(Pattern pattern)
          如果下一個標記與指定網要比對,則返回下一個標記。
 String next(String pattern)
          如果下一個標記與從指定字元串建構的網要比對,則返回下一個標記。
 BigDecimal nextBigDecimal()
          將輸入資訊的下一個標記掃瞄為一個 BigDecimal
 BigInteger nextBigInteger()
          將輸入資訊的下一個標記掃瞄為一個 BigInteger
 BigInteger nextBigInteger(int radix)
          將輸入資訊的下一個標記掃瞄為一個 BigInteger
 boolean nextBoolean()
          掃瞄解釋為一個布林值的輸入標記並返回該值。
 byte nextByte()
          將輸入資訊的下一個標記掃瞄為一個 byte
 byte nextByte(int radix)
          將輸入資訊的下一個標記掃瞄為一個 byte
 double nextDouble()
          將輸入資訊的下一個標記掃瞄為一個 double
 float nextFloat()
          將輸入資訊的下一個標記掃瞄為一個 float
 int nextInt()
          將輸入資訊的下一個標記掃瞄為一個 int
 int nextInt(int radix)
          將輸入資訊的下一個標記掃瞄為一個 int
 String nextLine()
          此掃瞄器執行當前行,並返回跳過的輸入資訊。
 long nextLong()
          將輸入資訊的下一個標記掃瞄為一個 long
 long nextLong(int radix)
          將輸入資訊的下一個標記掃瞄為一個 long
 short nextShort()
          將輸入資訊的下一個標記掃瞄為一個 short
 short nextShort(int radix)
          將輸入資訊的下一個標記掃瞄為一個 short
 int radix()
          返回此掃瞄器的預設進制。
 void remove()
          Iterator 的這種實作不支持移除操作。
 Scanner reset()
          重置此掃瞄器。
 Scanner skip(Pattern pattern)
          在忽略分隔符的情況下跳過與指定網要比對的輸入資訊。
 Scanner skip(String pattern)
          跳過與從指定字元串建構的網要比對的輸入資訊。
 String toString()
          返回此 Scanner 的字元串表示形式。
 Scanner useDelimiter(Pattern pattern)
          將此掃瞄器的分隔網要設置為指定網要。
 Scanner useDelimiter(String pattern)
          將此掃瞄器的分隔網要設置為從指定 String 建構的網要。
 Scanner useLocale(Locale locale)
          將此掃瞄器的語言環境設置為指定的語言環境。
 Scanner useRadix(int radix)
          將此掃瞄器的預設進制設置為指定進制。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

Scanner

public Scanner(Readable source)
建構一個新的 Scanner,它產生的值是從指定源掃瞄的。

參數:
source - 實作 Readable 介面的字元源

Scanner

public Scanner(InputStream source)
建構一個新的 Scanner,它產生的值是從指定的輸入串流掃瞄的。取自該串流的位元組通過底層平臺的預設字元集轉換成字元。

參數:
source - 要掃瞄的輸入串流

Scanner

public Scanner(InputStream source,
               String charsetName)
建構一個新的 Scanner,它產生的值是從指定的輸入串流掃瞄的。來自該串流的位元組通過指定字元集轉換成字元。

參數:
source - 要掃瞄的輸入串流
charsetName - 用於將來自該串流的位元組轉換成要掃瞄的字元的編碼型別
拋出:
IllegalArgumentException - 如果指定字元集不存在

Scanner

public Scanner(File source)
        throws FileNotFoundException
建構一個新的 Scanner,它產生的值是從指定檔案掃瞄的。來自該檔案的位元組通過底層平臺的預設字元集轉換成字元。

參數:
source - 要掃瞄的檔案
拋出:
FileNotFoundException - 如果源檔案未找到

Scanner

public Scanner(File source,
               String charsetName)
        throws FileNotFoundException
建構一個新的 Scanner,它產生的值是從指定檔案掃瞄的。來自該檔案的位元組通過指定字元集轉換成字元。

參數:
source - 要掃瞄的檔案
charsetName - 用於將來自該檔案的位元組轉換成要掃瞄的字元的編碼型別
拋出:
FileNotFoundException - 如果源檔案未找到
IllegalArgumentException - 如果指定的編碼未找到

Scanner

public Scanner(String source)
建構一個新的 Scanner,它產生的值是從指定字元串掃瞄的。

參數:
source - 要掃瞄的字元串

Scanner

public Scanner(ReadableByteChannel source)
建構一個新的 Scanner,它產生的值是從指定通道掃瞄的。來自該源的位元組通過底層平臺的預設字元集轉換成字元。

參數:
source - 要掃瞄的通道

Scanner

public Scanner(ReadableByteChannel source,
               String charsetName)
建構一個新的 Scanner,它產生的值是從指定通道掃瞄的。來自該源的位元組通過指定字元集轉換成字元。

參數:
source - 要掃瞄的通道
charsetName - 用於將來自該通道的位元組轉換成要掃瞄的字元的編碼型別
拋出:
IllegalArgumentException - 如果指定字元集不存在
方法詳細資訊

close

public void close()
關閉此掃瞄器。

如果此掃瞄器尚未關閉,並且其底層 readable 也實作 Closeable 介面,則該 readable 的 close 方法將被調用。如果此掃瞄器已經關閉,則調用此方法無效。

在掃瞄器關閉後執行搜尋操作將導致 IllegalStateException


ioException

public IOException ioException()
返回此 Scanner 的底層 Readable 最後拋出的 IOException。如果不存在這樣的異常,則此方法返回 null

返回:
此掃瞄器的 readable 最後拋出的異常

delimiter

public Pattern delimiter()
返回此 Scanner 當前正在用於比對分隔符的 Pattern

返回:
此掃瞄器的分隔網要。

useDelimiter

public Scanner useDelimiter(Pattern pattern)
將此掃瞄器的分隔網要設置為指定網要。

參數:
pattern - 分隔網要
返回:
此掃瞄器

useDelimiter

public Scanner useDelimiter(String pattern)
將此掃瞄器的分隔網要設置為從指定 String 建構的網要。

此方法調用 useDelimiter(pattern) 的行為與調用 useDelimiter(Pattern.compile(pattern)) 完全相同。

調用 reset() 方法將把掃瞄器的分隔符設置為 預設

參數:
pattern - 指定分隔網要的字元串
返回:
此掃瞄器

locale

public Locale locale()
返回此掃瞄器的語言環境。

掃瞄器的語言環境會影響其與正則表達式比對的預設基元的許多元素;參見上面的本地化數字

返回:
此掃瞄器的語言環境

useLocale

public Scanner useLocale(Locale locale)
將此掃瞄器的語言環境設置為指定的語言環境。

掃瞄器的語言環境會影響其與正則表達式比對的預設基元的許多元素;參見上面的本地化數字

調用 reset() 方法將把掃瞄器的語言環境設置為初始語言環境

參數:
locale - 指定要使用的語言環境的字元串
返回:
此掃瞄器

radix

public int radix()
返回此掃瞄器的預設進制。

掃瞄器的進制會影響其與正則表達式比對的預設數的元素;參見上面的本地化數字

返回:
此掃瞄器的預設進制

useRadix

public Scanner useRadix(int radix)
將此掃瞄器的預設進制設置為指定進制。

掃瞄器的進制會影響其與正則表達式比對的預設數的元素;參見上面的本地化數字

如果該進制小於 Character.MIN_RADIX 或大於 Character.MAX_RADIX,則拋出 IllegalArgumentException

調用 reset() 方法將把掃瞄器的進制設置為 10

參數:
radix - 掃瞄數時要使用的進制
返回:
此掃瞄器
拋出:
IllegalArgumentException - 如果進制超出範圍

match

public MatchResult match()
返回此掃瞄器所執行的最後掃瞄操作的比對結果。如果未執行比對操作,或者最後的比對操作失敗,則此方法拋出 IllegalStateException

如果 Scanner 的不同 next 方法執行結束時未拋出異常,則它們會給出一個比對結果。例如,調用了 nextInt() 方法(它返回一個 int)後,此方法返回一個 MatchResult,作為搜尋上述 Integer 正則表達式的結果。類似地,如果 findInLine(java.lang.String)findWithinHorizon(java.lang.String, int)skip(java.util.regex.Pattern) 方法的調用成功,則它們會給出一個比對結果。

返回:
最後一次比對操作的比對結果
拋出:
IllegalStateException - 如果未給出比對結果

toString

public String toString()

返回此 Scanner 的字元串表示形式。Scanner 的字元串表示形式包含了對除錯可能有用的資訊。沒有指定確切格式。

覆寫:
類別 Object 中的 toString
返回:
此掃瞄器的字元串表示形式。

hasNext

public boolean hasNext()
如果此掃瞄器的輸入中有另一個標記,則返回 true。在等待要掃瞄的輸入時,此方法可能阻塞。掃瞄器將不執行任何輸入。

指定者:
介面 Iterator<String> 中的 hasNext
返回:
當且僅當此掃瞄器有另一個標記時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉
另請參見:
Iterator

next

public String next()
尋找並返回來自此掃瞄器的下一個完整標記。完整標記的前後是與分隔網要比對的輸入資訊。即使以前調用 hasNext() 返回了 true,在等待要掃瞄的輸入時此方法也可能阻塞。

指定者:
介面 Iterator<String> 中的 next
返回:
下一個標記
拋出:
NoSuchElementException - 如果沒有更多標記可用
IllegalStateException - 如果此掃瞄器已關閉
另請參見:
Iterator

remove

public void remove()
Iterator 的這種實作不支持移除操作。

指定者:
介面 Iterator<String> 中的 remove
拋出:
UnsupportedOperationException - 如果調用此方法。
另請參見:
Iterator

hasNext

public boolean hasNext(String pattern)
如果下一個標記與從指定字元串建構的網要比對,則返回 true。掃瞄器不執行任何輸入。

此方法調用 hasNext(pattern) 的行為與調用 hasNext(Pattern.compile(pattern)) 完全相同。

參數:
pattern - 指定要掃瞄的網要的字元串
返回:
當且僅當此掃瞄器有另一個標記與指定網要比對時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

next

public String next(String pattern)
如果下一個標記與從指定字元串建構的網要比對,則返回下一個標記。如果比對操作成功,則掃瞄器執行與該網要比對的輸入。

此方法調用 next(pattern) 的行為與調用 next(Pattern.compile(pattern)) 完全相同。

參數:
pattern - 指定要掃瞄的網要的字元串
返回:
下一標記
拋出:
NoSuchElementException - 如果沒有這樣的標記可用
IllegalStateException - 如果此掃瞄器已關閉

hasNext

public boolean hasNext(Pattern pattern)
如果下一個完整標記與指定網要比對,則返回 true。完整標記以與分隔網要比對的輸入資訊為前後綴。在等待輸入資訊時,此方法可能阻塞。掃瞄器不執行任何輸入。

參數:
pattern - 要掃瞄的網要
返回:
當且僅當此掃瞄器有另一個標記與指定網要比對時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

next

public String next(Pattern pattern)
如果下一個標記與指定網要比對,則返回下一個標記。即使以前調用 hasNext(Pattern) 返回了 true,在等待要掃瞄的輸入時此方法也可能阻塞。如果此比對操作成功,則掃瞄器執行與該網要比對的輸入。

參數:
pattern - 要掃瞄的網要
返回:
下一個標記
拋出:
NoSuchElementException - 如果沒有更多的標記可用
IllegalStateException - 如果此掃瞄器已關閉

hasNextLine

public boolean hasNextLine()
如果在此掃瞄器的輸入中存在另一行,則返回 true。在等待輸入資訊時,此方法可能阻塞。掃瞄器不執行任何輸入。

返回:
當且僅當此掃瞄器有另一行輸入時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextLine

public String nextLine()
此掃瞄器執行當前行,並返回跳過的輸入資訊。 此方法返回當前行的其餘部分,不包括結尾處的行分隔符。當前位置移至下一行的行首。

因為此方法會繼續在輸入資訊中尋找行分隔符,所以如果沒有行分隔符,它可能會緩衝所有輸入資訊,並尋找要跳過的行。

返回:
跳過的行
拋出:
NoSuchElementException - 如果未找到這樣的行
IllegalStateException - 如果此掃瞄器已關閉

findInLine

public String findInLine(String pattern)
試圖在忽略分隔符的情況下尋找下一個從指定字元串建構的網要。

此方面調用 findInLine(pattern) 的行為與調用 findInLine(Pattern.compile(pattern)) 完全相同。

參數:
pattern - 指定要搜尋的網要的字元串
返回:
與指定網要比對的文本
拋出:
IllegalStateException - 如果此掃瞄器已關閉

findInLine

public String findInLine(Pattern pattern)
試圖在忽略分隔符的情況下尋找下一個指定網要。如果在下一個行分隔符前找到了該網要,則掃瞄器執行比對的輸入資訊,並返回與該網要比對的字元串。如果未找到,則返回 null,且掃瞄器的位置不變。在等待與該網要比對的輸入資訊時,此方法可能阻塞。

因為此方法會繼續在輸入資訊中尋找指定的網要,所以如果沒有行分隔符,它可能會緩衝所有輸入資訊,並尋找所需的標記。

參數:
pattern - 要掃瞄的網要
返回:
與指定網要比對的文本
拋出:
IllegalStateException - 如果此掃瞄器已關閉

findWithinHorizon

public String findWithinHorizon(String pattern,
                                int horizon)
試圖在忽略分隔符的情況下尋找下一個從指定字元串建構的網要。

此方法調用 findWithinHorizon(pattern) 的行為與調用 findWithinHorizon(Pattern.compile(pattern, horizon)) 完全相同。

參數:
pattern - 指定要搜尋的網要的字元串
返回:
與指定網要比對的文本
拋出:
IllegalStateException - 如果此掃瞄器已關閉
IllegalArgumentException - 如果 horizon 為負

findWithinHorizon

public String findWithinHorizon(Pattern pattern,
                                int horizon)
試圖尋找下一個指定網要。

此方法在忽略分隔符的情況下在指定的搜尋範圍內搜尋輸入資訊。如果找到了該網要,則掃瞄器執行比對的輸入資訊,並返回與該網要比對的字元串。如果未找到,則返回 null,且掃瞄器的位置不變。在等待與該網要比對的輸入資訊時,此方法可能阻塞。

掃瞄器的搜尋永遠都不超出其當前位置以外的 horizon 程式碼點。注意,比對可能被 horizon 剪裁;也就是說,如果 horizon 變大,則任意比對結果都可能不同。掃瞄器將 horizon 看作一個不固定的透明邊界(請參見 Matcher.useTransparentBounds(boolean)Matcher.useAnchoringBounds(boolean))。

如果 horizon 為 0,則忽略 horizon,此方法繼續在輸入資訊中尋找指定的網要,且不設邊界。在這種情況下,它可能會緩衝所有輸入資訊,並搜尋該網要。

如果 horizon 為負,則拋出 IllegalArgumentException。

參數:
pattern - 要掃瞄的網要
返回:
與指定網要比對的文本
拋出:
IllegalStateException - 如果此掃瞄器已關閉
IllegalArgumentException - 如果 horizon 為負

skip

public Scanner skip(Pattern pattern)
在忽略分隔符的情況下跳過與指定網要比對的輸入資訊。如果指定網要的固定比對成功,此方法則跳過輸入資訊。

如果在當前位置未找到指定網要,則不跳過任何輸入資訊,並拋出 NoSuchElementException

由於此方法試圖從掃瞄器的當前位置比對指定網要,因此可與許多輸入資訊(例如 ".*")比對的網要可能會導致掃瞄器緩衝大量輸入資訊。

注意,通過使用沒有任何比對項的網要,例如,sc.skip("[ \t]*"),跳過某些資訊同時不拋出 NoSuchElementException 是可能的。

參數:
pattern - 指定要跳過的網要的字元串
返回:
此掃瞄器
拋出:
NoSuchElementException - 如果未找到指定網要
IllegalStateException - 如果此掃瞄器已關閉

skip

public Scanner skip(String pattern)
跳過與從指定字元串建構的網要比對的輸入資訊。

此方法調用 skip(pattern) 的行為與調用 skip(Pattern.compile(pattern)) 完全相同。

參數:
pattern - 指定要跳過的網要的字元串
返回:
此掃瞄器
拋出:
IllegalStateException - 如果此掃瞄器已關閉

hasNextBoolean

public boolean hasNextBoolean()
如果通過使用一個從字元串 "true|false" 創建的大小寫敏感的網要,此掃瞄器輸入資訊中的下一個標記可以解釋為一個布林值,則返回 true。掃瞄器不執行比對的輸入。

返回:
當且僅當此掃瞄器的下一個標記是有效的布林值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextBoolean

public boolean nextBoolean()
掃瞄解釋為一個布林值的輸入標記並返回該值。如果下一個標記不能轉換為有效的布林值,則此方法將拋出 InputMismatchException。如果此比對操作成功,則掃瞄器執行比對的輸入。

返回:
從輸入資訊掃瞄的布林值
拋出:
InputMismatchException - 如果下一標記不是有效的布林值
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

hasNextByte

public boolean hasNextByte()
如果通過使用 nextByte() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個位元組值,則返回 true。掃瞄器不執行任何輸入。

返回:
當且僅當此掃瞄器的下一個標記是有效的位元組值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

hasNextByte

public boolean hasNextByte(int radix)
如果通過使用 nextByte() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個位元組值,則返回 true。掃瞄器不執行任何輸入。

參數:
radix - 用於將標記解釋為一個位元組值的進制
返回:
當且僅當此掃瞄器的下一個標記是有效的位元組值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextByte

public byte nextByte()
將輸入資訊的下一個標記掃瞄為一個 byte

此方法調用 nextByte() 的行為與調用 nextByte(radix) 完全相同,其中的 radix 是此掃瞄器的預設進制。

返回:
從輸入資訊掃瞄的 byte
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

nextByte

public byte nextByte(int radix)
將輸入資訊的下一個標記掃瞄為一個 byte。如果下一個標記不能轉換為有效的位元組值,則此方法將拋出 InputMismatchException,如下所述。如果此轉換成功,則掃瞄器執行比對的輸入。

如果下一個標記與上述的 Integer 正則表達式比對,則該標記轉換成一個 byte 值,就好像通過移除所有特定於語言環境的前綴、組分隔符和特定於語言環境的後綴,然後通過 Character.digit 將非 ASCII 數字映射為 ASCII 數字, 如果存在特定於語言環境的負前綴和後綴則預先掛起負號 (-),以及將得到的字元串傳遞給帶有指定進制的 Byte.parseByte

參數:
radix - 用於將標記解釋為位元組值的進制
返回:
從輸入資訊掃瞄的 byte
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

hasNextShort

public boolean hasNextShort()
如果通過使用 nextShort() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 short 值,則返回 true。掃瞄器不執行任何輸入。

返回:
當且僅當此掃瞄器的下一個標記是預設進制中的有效的 short 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

hasNextShort

public boolean hasNextShort(int radix)
如果通過使用 nextShort() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個 short 值,則返回 true。掃瞄器不執行任何輸入。

參數:
radix - 用於將標記解釋為一個 short 值的進制
返回:
當且僅當此掃瞄器的下一個標記是指定進制中的有效的 short 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextShort

public short nextShort()
將輸入資訊的下一個標記掃瞄為一個 short

此方法調用 nextShort() 行為與調用 nextShort(radix) 完全相同,其中的 radix 是此掃瞄器的預設進制。

返回:
從輸入資訊掃瞄的 short
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

nextShort

public short nextShort(int radix)
將輸入資訊的下一個標記掃瞄為一個 short。如果下一個標記不能轉換為有效的 short 值,則此方法將拋出 InputMismatchException,如下所述。如果此轉換成功,則掃瞄器執行比對的輸入。

如果下一個標記與上述的 Integer 正則表達式比對,則該標記轉換成一個 short 值,就好像通過移除所有特定於語言環境的前綴、組分隔符和特定於語言環境的後綴,然後通過 Character.digit 將非 ASCII 數字映射為 ASCII 數字, 如果存在特定於語言環境的負前綴和後綴則預先掛起負號 (-),然後將得到的字元串傳遞給帶有指定進制的 Short.parseShort

參數:
radix - 用於將標記解釋為 short 值的進制
返回:
從輸入資訊掃瞄的 short
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

hasNextInt

public boolean hasNextInt()
如果通過使用 nextInt() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 int 值,則返回 true。掃瞄器不執行任何輸入。

返回:
當且僅當此掃瞄器的下一個標記是有效的 int 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

hasNextInt

public boolean hasNextInt(int radix)
如果通過使用 nextInt() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個 int 值,則返回 true。掃瞄器不執行任何輸入。

參數:
radix - 用於將標記解釋為一個 int 值的進制
返回:
當且僅當此掃瞄器的下一個標記是有效的 int 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextInt

public int nextInt()
將輸入資訊的下一個標記掃瞄為一個 int

此方法調用 nextInt() 的行為與調用 nextInt(radix) 完全相同,其中的 radix 是此掃瞄器的預設進制。

返回:
從輸入資訊掃瞄的 int
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

nextInt

public int nextInt(int radix)
將輸入資訊的下一個標記掃瞄為一個 int。如果下一個標記不能轉換為有效的 int 值,則此方法將拋出 InputMismatchException,如下所述。如果此轉換成功,則掃瞄器執行比對的輸入。

如果下一個標記與上述的 Integer 正則表達式比對,則該標記轉換成一個 int 值,就好像通過移除所有特定於語言環境的前綴、組分隔符和特定於語言環境的後綴,然後通過 Character.digit 將非 ASCII 數字映射為 ASCII 數字, 如果存在特定於語言環境的負前綴和後綴則預先掛起負號 (-),然後將得到的字元串傳遞給帶有指定進制的 Integer.parseInt

參數:
radix - 用於將標記解釋為 int 值的進制
返回:
從輸入資訊掃瞄的 int
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

hasNextLong

public boolean hasNextLong()
如果通過使用 nextLong() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 long 值,則返回 true。掃瞄器不執行任何輸入。

返回:
當且僅當此掃瞄器的下一個標記是有效的 long 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

hasNextLong

public boolean hasNextLong(int radix)
如果通過使用 nextLong() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個 long 值,則返回 true。掃瞄器不執行任何輸入。

參數:
radix - 用於將標記解釋為一個 long 值的進制
返回:
當且僅當此掃瞄器的下一個標記是有效的 long 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextLong

public long nextLong()
將輸入資訊的下一個標記掃瞄為一個 long

此方法調用 nextLong() 的行為與調用 nextLong(radix) 完全相同,其中的 radix 是此掃瞄器的預設進制。

返回:
從輸入資訊掃瞄的 long
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

nextLong

public long nextLong(int radix)
將輸入資訊的下一個標記掃瞄為一個 long。如果下一個標記不能轉換為有效的 long 值,則此方法將拋出 InputMismatchException,如下所述。如果此轉換成功,則掃瞄器執行比對的輸入。

如果下一個標記與上述的 Integer 正則表達式比對,則該標記轉換成一個 long 值,就好像通過移除所有特定於語言環境的前綴、組分隔符和特定於語言環境的後綴,然後通過 Character.digit 將非 ASCII 數字映射為 ASCII 數字, 如果存在特定於語言環境的負前綴和後綴則預先掛起負號 (-),以及將得到的字元串傳遞給帶有指定進制的 Long.parseLong

參數:
radix - 用於將標記解釋為 long 值的進制
返回:
從輸入資訊掃瞄的 long
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

hasNextFloat

public boolean hasNextFloat()
如果通過使用 nextFloat() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 float 值,則返回 true。掃瞄器不執行任何輸入。

返回:
當且僅當此掃瞄器的下一個標記是有效的 float 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextFloat

public float nextFloat()
將輸入資訊的下一個標記掃瞄為一個 float。如果下一個標記不能轉換為有效的 float 值,則此方法將拋出 InputMismatchException,如下所述。如果此轉換成功,則掃瞄器執行比對的輸入。

如果下一個標記與上述的 Float 正則表達式比對,則該標記轉換成一個 float 值,就好像通過移除所有特定於語言環境的前綴、組分隔符和特定於語言環境的後綴,然後通過 Character.digit 將非 ASCII 數字映射為 ASCII 數字, 如果存在特定於語言環境的負前綴和後綴則預先掛起負號 (-),以及將得到的字元串傳遞給 Float.parseFloat。如果標記與本地化的 NaN 或無窮大字元串比對,則將 "Nan" 或 "Infinity" 相應地傳遞給 Float.parseFloat

返回:
從輸入資訊掃瞄的 float
拋出:
InputMismatchException - 如果下一個標記與 float 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

hasNextDouble

public boolean hasNextDouble()
如果通過使用 nextDouble() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 double 值,則返回 true。掃瞄器不執行任何輸入。

返回:
當且僅當此掃瞄器的下一個標記是有效的 double 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextDouble

public double nextDouble()
將輸入資訊的下一個標記掃瞄為一個 double。如果下一個標記不能轉換為有效的 double 值,則此方法將拋出 InputMismatchException。如果此轉換成功,則掃瞄器執行比對的輸入。

如果下一個標記與上述的 Float 正則表達式比對,則該標記轉換成一個 double 值,就好像通過移除所有特定於語言環境的前綴、組分隔符和特定於語言環境的後綴,然後通過 Character.digit 將非 ASCII 數字映射為 ASCII 數字, 如果存在特定於語言環境的負前綴和後綴則預先掛起負號 (-),以及將得到的字元串傳遞給 Double.parseDouble。如果標記與本地化的 NaN 或無窮大字元串比對,則將 "Nan" 或 "Infinity" 相應地傳遞給 Double.parseDouble

返回:
從輸入資訊掃瞄的 double
拋出:
InputMismatchException - 如果下一個標記與 float 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

hasNextBigInteger

public boolean hasNextBigInteger()
如果通過使用 nextBigInteger() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 BigInteger 值,則返回 true。掃瞄器不執行任何輸入。

返回:
當且僅當此掃瞄器的下一個標記是有效的 BigInteger 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

hasNextBigInteger

public boolean hasNextBigInteger(int radix)
如果通過使用 nextBigInteger() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為指定進制中的一個 BigInteger 值,則返回 true。掃瞄器不執行任何輸入。

參數:
radix - 用於將標記解釋為一個 integer 的進制
返回:
當且僅當此掃瞄器的下一個標記是有效的 BigInteger 時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextBigInteger

public BigInteger nextBigInteger()
將輸入資訊的下一個標記掃瞄為一個 BigInteger

此方法調用 nextBigInteger() 的行為與調用 nextBigInteger(radix) 完全相同,其中的 radix 是此掃瞄器的預設進制。

返回:
從輸入資訊掃瞄的 BigInteger
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

nextBigInteger

public BigInteger nextBigInteger(int radix)
將輸入資訊的下一個標記掃瞄為一個 BigInteger

如果下一個標記與上述的 Integer 正則表達式比對,則該標記轉換成一個 BigInteger 值,就好像通過移除所有組分隔符,通過 Character.digit 將非 ASCII 數字映射為 ASCII 數字,以及將得到的字元串傳遞給帶有指定進制的 BigInteger(String, int) 建構子。

參數:
radix - 用於解釋標記的進制
返回:
從輸入資訊掃瞄的 BigInteger
拋出:
InputMismatchException - 如果下一個標記與 Integer 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

hasNextBigDecimal

public boolean hasNextBigDecimal()
如果通過使用 nextBigDecimal() 方法,此掃瞄器輸入資訊中的下一個標記可以解釋為預設進制中的一個 BigDecimal,則返回 true。掃瞄器不執行任何輸入。

返回:
當且僅當此掃瞄器的下一個標記是有效的 BigDecimal 值時才返回 true
拋出:
IllegalStateException - 如果此掃瞄器已關閉

nextBigDecimal

public BigDecimal nextBigDecimal()
將輸入資訊的下一個標記掃瞄為一個 BigDecimal

如果下一個標記與上述的 Decimal 正則表達式比對,則該標記轉換成一個 BigDecimal 值,就好像通過移除所有組分隔符,通過 Character.digit 將非 ASCII 數字映射為 ASCII 數字,以及將得到的字元串傳遞給 BigDecimal(String) 建構子。

返回:
從輸入資訊掃瞄的 BigDecimal
拋出:
InputMismatchException - 如果下一個標記與 Decimal 正則表達式不比對,或者超出範圍
NoSuchElementException - 如果輸入資訊已耗盡
IllegalStateException - 如果此掃瞄器已關閉

reset

public Scanner reset()
重置此掃瞄器。

重置掃瞄器會丟棄其所有明確的狀態資訊,這些狀態資訊可能通過調用 useDelimiter(java.util.regex.Pattern)useLocale(java.util.Locale)useRadix(int) 已被更改。

調用此方法的形式為 scanner.reset(),該調用與以下調用的作用完全相同:

   scanner.useDelimiter("\\p{javaWhitespace}+")
          .useLocale(Locale.getDefault())
          .useRadix(10);
 

返回:
此掃瞄器
從以下版本開始:
1.6

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only