Class Scanner

2026-08-08 08:22:38

方法详细信息

close public void close()

关闭此扫描仪。

如果此扫描程序尚未关闭,那么如果其底层readable也实现了Closeable接口,则将调用可读的close方法。 如果此扫描仪已关闭,则调用此方法将不起作用。

扫描仪关闭后尝试执行搜索操作将导致IllegalStateException 。

Specified by:

close在界面

AutoCloseable

Specified by:

close在界面

Closeable

ioException public IOException ioException()

返回IOException最后通过此抛出Scanner的基本Readable 。

如果不存在此类异常,则此方法返回null 。

结果

此扫描仪可读的最后一个异常

delimiter public Pattern delimiter()

返回

Pattern此

Scanner目前用于匹配分隔符。

结果

这个扫描仪的分界模式。

useDelimiter public Scanner useDelimiter​(Pattern pattern)

将此扫描仪的分隔模式设置为指定的模式。

参数

pattern -

pattern模式

结果

这个扫描仪

useDelimiter public Scanner useDelimiter​(String pattern)

将此扫描仪的分隔模式设置为从指定的String构造的模式。

调用useDelimiter(pattern)形式的此方法的行为与调用useDelimiter(Pattern.compile(pattern)) 。

调用reset()方法会将扫描仪的分隔符设置为default 。

参数

pattern - 指定分隔模式的字符串

结果

这个扫描仪

locale public Locale locale()

返回此扫描程序的语言环境。

扫描程序的语言环境会影响与正则表达式匹配的默认基元的许多元素; 见上面的localized numbers 。

结果

这个扫描仪的语言环境

useLocale public Scanner useLocale​(Locale locale)

将此扫描程序的语言环境设置为指定的语言环境。

扫描程序的语言环境会影响与正则表达式匹配的默认基元的许多元素; 见上面的localized numbers 。

调用reset()方法会将扫描仪的语言环境设置为initial locale 。

参数

locale - 指定要使用的语言环境的字符串

结果

这个扫描仪

radix public int radix()

返回此扫描器的默认基数。

扫描仪的基数会影响与正则表达式匹配的默认数字元素; 见上面的localized numbers 。

结果

此扫描仪的默认基数

useRadix public Scanner useRadix​(int radix)

将此扫描仪的默认基数设置为指定的基数。

扫描仪的基数会影响与正则表达式匹配的默认数字元素; 见上面的localized numbers 。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

调用reset()方法会将扫描仪的基数设置为10 。

参数

radix - 扫描数字时使用的基数

结果

这个扫描仪

异常

IllegalArgumentException - 如果基数超出范围

match public MatchResult match()

返回此扫描程序执行的上次扫描操作的匹配结果。

如果未执行匹配,或者最后一次匹配IllegalStateException则此方法抛出IllegalStateException 。

各种next的方法Scanner使,如果他们完成未抛出异常的比赛结果可用。 例如,在调用返回int的nextInt()方法之后,此方法返回MatchResult以搜索上面定义的Integer正则表达式。 同样, findInLine() , findWithinHorizon()和skip()方法将一个匹配结果,如果他们取得成功。

结果

最后一次匹配操作的匹配结果

异常

IllegalStateException - 如果没有可用的匹配结果

toString public String toString()

返回此Scanner的字符串表示Scanner 。 Scanner的字符串表示Scanner包含可能对调试有用的信息。 具体格式未指定。

重写:

toString课程类别

Object

结果

此扫描程序的字符串表示形式

hasNext public boolean hasNext()

如果此扫描器的输入中有另一个标记,则返回true。

在等待输入扫描时,此方法可能会阻塞。

扫描仪不会超过任何输入。

Specified by:

hasNext ,界面

Iterator

结果

当且仅当此扫描器具有另一个令牌时才返回true

异常

IllegalStateException - 如果此扫描仪已关闭

另请参见:

Iterator

next public String next()

从此扫描仪查找并返回下一个完整令牌。

在完成令牌之前和之后是与分隔符模式匹配的输入。

即使先前调用hasNext()返回true ,此方法也可能在等待输入扫描时true 。

Specified by:

next接口

Iterator

结果

下一个标记

异常

NoSuchElementException - 如果没有更多令牌可用

IllegalStateException - 如果此扫描仪已关闭

另请参见:

Iterator

remove public void remove()

Iterator的此实现不支持删除操作。

Specified by:

remove在界面

Iterator

异常

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))方式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 ,此方法也可能在等待输入扫描时true 。

如果匹配成功,扫描仪将超过与模式匹配的输入。

参数

pattern - 要扫描的模式

结果

下一个标记

异常

NoSuchElementException - 如果没有更多令牌可用

IllegalStateException - 如果此扫描仪已关闭

hasNextLine public boolean hasNextLine()

如果此扫描器的输入中有另一行,则返回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 - 指定要搜索的模式的字符串

horizon - 搜索范围

结果

与指定模式匹配的文本

异常

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果地平线是负面的

findWithinHorizon public String findWithinHorizon​(Pattern pattern,

int horizon)

尝试查找指定模式的下一个匹配项。

此方法搜索输入到指定的搜索范围,忽略分隔符。 如果找到模式,扫描仪将超过匹配的输入并返回与模式匹配的字符串。 如果未检测到此类模式,则返回null并且扫描仪的位置保持不变。 此方法可能会阻止等待与模式匹配的输入。

扫描仪永远不会搜索超过其当前位置的horizon代码点。 请注意,匹配可能会被地平线限制; 也就是说,如果地平线较大,任意匹配结果可能会有所不同。 扫描仪将地平线视为透明的非锚定边界(参见Matcher.useTransparentBounds(boolean)和Matcher.useAnchoringBounds(boolean) )。

如果horizon是0 ,则忽略horizon,此方法继续搜索输入,查找指定的模式而不绑定。 在这种情况下,它可以缓冲搜索模式的所有输入。

如果horizon是负数,则抛出IllegalArgumentException。

参数

pattern - 要扫描的模式

horizon - 搜索范围

结果

与指定模式匹配的文本

异常

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果地平线是负面的

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))方式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。

扫描仪不会超过任何输入。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于将令牌解释为字节值的基数

结果

当且仅当此扫描器的下一个标记是有效字节值时才为true

异常

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

nextByte public byte nextByte()

将输入的下一个标记扫描为byte 。

调用nextByte()形式的此方法的行为与调用nextByte(radix) ,其中radix是此扫描程序的默认基数。

结果

byte从输入扫描

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

nextByte public byte nextByte​(int radix)

将输入的下一个标记扫描为byte 。

如果下一个令牌无法转换为有效字节值,则此方法将抛出InputMismatchException ,如下所述。

如果翻译成功,扫描仪将超过匹配的输入。

如果下一个标记与上面定义的Integer正则表达式匹配,则标记将转换为byte值,就像删除所有特定于区域设置的前缀,组分隔符和特定于区域设置的后缀一样,然后通过Character.digit将非ASCII数字映射为ASCII数字, 前置如果存在特定于区域设置的负前缀和后缀,则将负号( - )传递给具有指定基数的Byte.parseByte 。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于将令牌解释为字节值的基数

结果

从输入扫描

byte

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

hasNextShort public boolean hasNextShort()

如果使用nextShort()方法将此扫描器输入中的下一个标记解释为默认基数中的短值,则返回true。

扫描仪不会超过任何输入。

结果

当且仅当此扫描器的下一个标记是默认基数中的有效短值时才为true

异常

IllegalStateException - 如果此扫描仪已关闭

hasNextShort public boolean hasNextShort​(int radix)

如果使用nextShort()方法将此扫描器输入中的下一个标记解释为指定基数中的短值,则返回true。

扫描仪不会超过任何输入。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于将令牌解释为短值的基数

结果

当且仅当此扫描器的下一个标记是指定基数中的有效短值时才为true

异常

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

nextShort public short nextShort()

将输入的下一个标记扫描为short 。

调用nextShort()形式的此方法的行为与调用nextShort(radix)完全相同 ,其中radix是此扫描程序的默认基数。

结果

从输入扫描

short

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入用尽

IllegalStateException - 如果此扫描仪已关闭

nextShort public short nextShort​(int radix)

将输入的下一个标记扫描为short 。

如果下一个令牌无法转换为有效的短值,则此方法将抛出InputMismatchException ,如下所述。

如果翻译成功,扫描仪将超过匹配的输入。

如果下一个标记与上面定义的Integer正则表达式匹配,则标记将转换为short值,就好像通过删除所有特定于区域设置的前缀,组分隔符和特定于区域设置的后缀,然后通过Character.digit将非ASCII数字映射到ASCII数字, 前置如果存在特定于区域设置的负前缀和后缀,则将负号( - )传递给具有指定基数的Short.parseShort 。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于将令牌解释为短值的基数

结果

short从输入扫描

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

hasNextInt public boolean hasNextInt()

如果此扫描器输入中的下一个标记可以使用nextInt()方法解释为默认基数中的int值,则返回true。

扫描仪不会超过任何输入。

结果

当且仅当此扫描程序的下一个标记是有效的int值时才返回true

异常

IllegalStateException - 如果此扫描仪已关闭

hasNextInt public boolean hasNextInt​(int radix)

如果此扫描器输入中的下一个标记可以使用nextInt()方法解释为指定基数中的int值,则返回true。

扫描仪不会超过任何输入。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于将令牌解释为int值的基数

结果

当且仅当此扫描程序的下一个标记是有效的int值时才返回true

异常

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

nextInt public int nextInt()

将输入的下一个标记扫描为int 。

调用nextInt()形式的此方法的行为与调用nextInt(radix) ,其中radix是此扫描程序的默认基数。

结果

int从输入扫描

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

nextInt public int nextInt​(int radix)

将输入的下一个标记扫描为int 。

如果下一个令牌无法转换为有效的int值,则此方法将抛出InputMismatchException ,如下所述。

如果翻译成功,扫描仪将超过匹配的输入。

如果下一个标记与上面定义的Integer正则表达式匹配,则标记将转换为int值,就好像通过删除所有特定于区域设置的前缀,组分隔符和特定于区域设置的后缀,然后通过Character.digit将非ASCII数字映射到ASCII数字, 前置如果存在特定于区域设置的负前缀和后缀,则使用负号( - ),并将结果字符串传递给具有指定基数的Integer.parseInt 。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于将标记解释为int值的基数

结果

int从输入扫描

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

hasNextLong public boolean hasNextLong()

如果使用nextLong()方法将此扫描器输入中的下一个标记解释为默认基数中的long值,则返回true。

扫描仪不会超过任何输入。

结果

当且仅当此扫描器的下一个标记是有效的长值时才为true

异常

IllegalStateException - 如果此扫描仪已关闭

hasNextLong public boolean hasNextLong​(int radix)

如果此扫描器输入中的下一个标记可以使用nextLong()方法解释为指定基数中的长值,则返回true。

扫描仪不会超过任何输入。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于将令牌解释为长值的基数

结果

当且仅当此扫描器的下一个标记是有效的长值时才为true

异常

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

nextLong public long nextLong()

将输入的下一个标记扫描为long 。

调用nextLong()形式的此方法的行为与调用nextLong(radix) ,其中radix是此扫描程序的默认基数。

结果

long从输入扫描

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

nextLong public long nextLong​(int radix)

将输入的下一个标记扫描为long 。

如果下一个令牌无法转换为有效的长值,则此方法将抛出InputMismatchException ,如下所述。

如果翻译成功,扫描仪将超过匹配的输入。

如果下一个标记与上面定义的Integer正则表达式匹配, 则将标记转换为long值,就好像通过删除所有特定于区域设置的前缀,组分隔符和特定于区域设置的后缀,然后通过Character.digit将非ASCII数字映射到ASCII数字, 前置如果存在特定于区域设置的负前缀和后缀,则使用负号( - ),并将结果字符串传递给具有指定基数的Long.parseLong 。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于将标记解释为int值的基数

结果

从输入扫描

long

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

hasNextFloat public boolean hasNextFloat()

如果使用nextFloat()方法可以将此扫描器输入中的下一个标记解释为浮点值,则返回true。

扫描仪不会超过任何输入。

结果

当且仅当此扫描器的下一个标记是有效的浮点值时才返回true

异常

IllegalStateException - 如果此扫描仪已关闭

nextFloat public float nextFloat()

将输入的下一个标记扫描为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

异常

IllegalStateException - 如果此扫描仪已关闭

hasNextBigInteger public boolean hasNextBigInteger​(int radix)

如果此扫描器输入中的下一个标记可以使用nextBigInteger()方法在指定的基数中解释为BigInteger ,则返回true。

扫描仪不会超过任何输入。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于将标记解释为整数的基数

结果

当且仅当此扫描程序的下一个标记是有效的

BigInteger

异常

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

nextBigInteger public BigInteger nextBigInteger()

将输入的下一个标记扫描为BigInteger 。

调用nextBigInteger()形式的此方法的行为与调用nextBigInteger(radix) ,其中radix是此扫描程序的默认基数。

结果

BigInteger从输入扫描

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

nextBigInteger public BigInteger nextBigInteger​(int radix)

将输入的下一个标记扫描为BigInteger 。

如果下一个标记与上面定义的Integer正则表达式匹配,则标记将转换为BigInteger值,就好像通过删除所有组分隔符,通过Character.digit将非ASCII数字映射为ASCII数字,并将结果字符串传递给BigInteger(String, int)构造函数指定的基数。

如果基数小于Character.MIN_RADIX或大于Character.MAX_RADIX ,则抛出IllegalArgumentException 。

参数

radix - 用于解释令牌的基数

结果

从输入扫描

BigInteger

异常

InputMismatchException - 如果下一个标记与

整数正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

IllegalArgumentException - 如果基数超出范围

hasNextBigDecimal public boolean hasNextBigDecimal()

如果此扫描器输入中的下一个标记可以使用nextBigDecimal()方法解释为BigDecimal则返回true。

扫描仪不会超过任何输入。

结果

当且仅当此扫描器的下一个令牌是有效的

BigDecimal

异常

IllegalStateException - 如果此扫描仪已关闭

nextBigDecimal public BigDecimal nextBigDecimal()

将输入的下一个标记扫描为BigDecimal 。

如果下一个标记与上面定义的Decimal正则表达式匹配,则标记将转换为BigDecimal值,就好像通过删除所有组分隔符,通过Character.digit将非ASCII数字映射为ASCII数字,并将结果字符串传递给BigDecimal(String)构造函数。

结果

从输入扫描

BigDecimal

异常

InputMismatchException - 如果下一个标记与

十进制正则表达式不匹配,或者超出范围

NoSuchElementException - 如果输入已用尽

IllegalStateException - 如果此扫描仪已关闭

reset public Scanner reset()

重置此扫描仪。

重置扫描器会丢弃所有可能已经通过调用改变了明确的状态信息useDelimiter() , useLocale() ,或useRadix() 。

调用scanner.reset()形式的此方法的行为与调用的方式完全相同

scanner.useDelimiter("\\p{javaWhitespace}+")

.useLocale(Locale.getDefault(Locale.Category.FORMAT))

.useRadix(10);

结果

这个扫描仪

从以下版本开始:

1.6

tokens public Stream tokens()

从此扫描程序返回分隔符分隔的标记流。

该流包含将从此扫描器的当前状态开始返回的相同标记,方法是重复调用next()方法,直到hasNext()方法返回false。

生成的流是顺序的并且是有序的。 所有流元素都是非null。

使用该扫描仪的当前状态,在启动终端流操作时开始扫描。 对close()和ioException()以外的此扫描仪上的任何方法的后续调用可能会返回未定义的结果,或者可能会对返回的流造成不确定的影响。 返回流的源Spliterator是快速失败的 , 并且如果在流管道执行期间检测到任何此类调用,则将尽最大努力抛出ConcurrentModificationException 。

流管道执行完成后,此扫描程序将处于不确定状态,无法重复使用。

如果此扫描程序包含必须释放的资源,则应通过调用其close()方法或关闭返回的流来关闭此扫描程序。 关闭流将关闭底层扫描程序。 如果在调用此方法时扫描程序已关闭,或者在流管道执行期间关闭此扫描程序,则抛出IllegalStateException 。

此方法可能会阻止等待更多输入。

API Note:

例如,以下代码将从字符串创建逗号分隔的标记列表:

List result = new Scanner("abc,def,,ghi") .useDelimiter(",") .tokens() .collect(Collectors.toList());

结果列表将包含"abc" , "def" ,空字符串,和"ghi" 。

结果

令牌字符串的连续流

异常

IllegalStateException - 如果此扫描仪已关闭

从以下版本开始:

9

findAll public Stream findAll​(Pattern pattern)

返回此扫描程序的匹配结果流。

只要findWithinHorizon()找到匹配项,流就会以相同的顺序包含相同的结果,通过调用findWithinHorizon(pattern, 0)和match()返回。

生成的流是顺序的并且是有序的。 所有流元素都是非null。

使用该扫描仪的当前状态,在启动终端流操作时开始扫描。 对close()和ioException()以外的此扫描仪上的任何方法的后续调用可能会返回未定义的结果,或者可能会对返回的流造成未定义的影响。 返回的流的源Spliterator是快速失败的 ,如果在流管道执行期间检测到任何此类调用,则将尽最大努力抛出ConcurrentModificationException 。

流管道执行完成后,此扫描程序将处于不确定状态,无法重复使用。

如果此扫描程序包含必须释放的资源,则应通过调用其close()方法或关闭返回的流来关闭此扫描程序。 关闭流将关闭底层扫描程序。 如果在调用此方法时扫描程序已关闭,或者在流管道执行期间关闭此扫描程序,则抛出IllegalStateException 。

与findWithinHorizon()方法一样,此方法可能会阻止等待其他输入,并且可能会缓冲搜索匹配的无限量输入。

API Note:

例如,以下代码将读取文件并返回由七个或更多拉丁大写字母组成的所有字符序列的列表:

try (Scanner sc = new Scanner(Path.of("input.txt"))) { Pattern pat = Pattern.compile("[A-Z]{7,}"); List capWords = sc.findAll(pat) .map(MatchResult::group) .collect(Collectors.toList()); }

参数

pattern - 要匹配的模式

结果

连续的匹配结果流

异常

NullPointerException - 如果pattern为null

IllegalStateException - 如果此扫描仪已关闭

从以下版本开始:

9

findAll public Stream findAll​(String patString)

返回与提供的模式字符串匹配的匹配结果流。

效果等同于以下代码:

scanner.findAll(Pattern.compile(patString))

参数

patString - 模式字符串

结果

连续的匹配结果流

异常

NullPointerException - 如果patString为null

IllegalStateException - 如果此扫描仪已关闭

PatternSyntaxException - 如果正则表达式的语法无效

从以下版本开始:

9

另请参见:

Pattern