【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/133872926
出自【进步*于辰的博客】
继承关系:
实现的所有接口
Closeable , AutoCloseable , Iterator
public final class Scanner extends Object implements Iterator
一个简单的文本扫描程序,可以使用正则表达式解析基本类型和字符串。
Scanner使用分隔符模式将其输入分解为标记,该分隔符模式默认匹配空格。 将得到的令牌可以然后被转换成使用各种不同类型的值next()方法。
例如,此代码允许用户从System.in读取数字:
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
作为另一个示例,此代码允许从文件myNumbers条目分配 long 类型:
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
使用此代码可以生成相同的输出,该代码使用正则表达式一次解析所有四个标记:
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();
4502201395911识别扫描仪使用的default whitespace delimiter 。 reset()将扫描仪分隔符的值重置为默认的空白分隔符,无论它是否先前已更改。
扫描操作可能阻止等待输入。
next()和hasNext()及其伴随方法(例如nextInt()和hasNextInt() )首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个标记。 hasNext()和next()都可能阻止等待进一步输入。 hasNext()方法块是否与其关联的next()是否将阻止next() 。 tokens()方法还可以阻止等待输入。
的findInLine() , findWithinHorizon() , skip() 和findAll()定界符模式的独立操作。 这些方法将尝试匹配指定的模式而不考虑输入中的分隔符,因此可以在分隔符不相关的特殊情况下使用。 这些方法可能会阻止等待更多输入。
当扫描程序抛出InputMismatchException时 ,扫描程序将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过它。
根据分隔模式的类型,可以返回空标记。 例如,模式"\\s+"将不返回空标记,因为它匹配分隔符的多个实例。 "\\s"模式可以返回空标记,因为它一次只通过一个空格。
扫描程序可以从任何实现 Readable 接口的对象读取文本。 如果对底层可读read()的调用抛出IOException,则扫描程序会假定已到达输入的结尾。 可以通过ioException()检索由底层可读引发的最新 IOException 。
当 Scanner 关闭时,如果源实现 Closeable 接口,它将关闭其输入源。
Scanner 对于没有外部同步的多线程使用是不安全的。
除非另有说明,否则将null参数传递给任何方法,将导致抛出NullPointerException 。
除非使用useRadix(int)设置了不同的基数,否则扫描仪将默认将数字解释为十进制。 无论先前是否更改过扫描仪, reset()都会将扫描仪基数的值重置为10 。
Localized numbers
此类的实例能够扫描标准格式的数字以及扫描程序的语言环境的格式。 扫描仪initial locale是Locale.getDefault(Locale.Category.FORMAT)返回的值。它可以通过useLocale()更改。 reset()将扫描程序的语言环境的值重置为初始语言环境,无论它是否先前已更改。
本地化格式是根据以下参数定义的,对于特定区域设置,这些参数取自该区域设置的 DecimalFormat 对象df及其 DecimalFormatSymbols 对象dfs 。
LocalGroupSeparator
The character used to separate thousands groups, i.e., dfs. getGroupingSeparator()
LocalDecimalSeparator
The character used for the decimal point, i.e., dfs. getDecimalSeparator()
LocalPositivePrefix
The string that appears before a positive number (may be empty), i.e., df. getPositivePrefix()
LocalPositiveSuffix
The string that appears after a positive number (may be empty), i.e., df. getPositiveSuffix()
LocalNegativePrefix
The string that appears before a negative number (may be empty), i.e., df. getNegativePrefix()
LocalNegativeSuffix
The string that appears after a negative number (may be empty), i.e., df. getNegativeSuffix()
LocalNaN
The string that represents not-a-number for floating-point values, i.e., dfs. getNaN()
LocalInfinity
The string that represents infinity for floating-point values, i.e., dfs. getInfinity()
Number syntax
可以通过以下正则表达式语法来指定可由该类的实例解析为数字的字符串,其中Rmax是所使用的基数中的最高位(例如,基数10中的 Rmax 是9)。
NonAsciiDigit :
非ASCII字符c, Character.isDigit (c)返回true
Non0Digit :
[1- Rmax ] | NonASCIIDigit
数字 :
[0- Rmax ] | NonASCIIDigit
GroupedNumeral :
( Non0Digit Digit ? Digit ?
( LocalGroupSeparator 数字 位 数字 )+ )
数字 :
( ( 数字 + ) | GroupedNumeral )
Integer:
( [-+]? ( 数字 ) )
| LocalPositivePrefix 数字 LocalPositiveSuffix
| LocalNegativePrefix 数字 LocalNegativeSuffix
十进制数 :
数字
| 数字 LocalDecimalSeparator 数字 *
| LocalDecimalSeparator 数字 +
指数 :
( [eE] [+-]? 数字 + )
Decimal:
( [-+]? DecimalNumeral 指数 ? )
| LocalPositivePrefix DecimalNumeral LocalPositiveSuffix Exponent ?
| LocalNegativePrefix DecimalNumeral LocalNegativeSuffix Exponent ?
HexFloat :
[-+]? 0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+ ([pP][-+]?[0-9]+)?
非数字 :
NaN | LocalNan | Infinity | LocalInfinity
SignedNonNumber :
( [-+]? NonNumber )
| LocalPositivePrefix NonNumber LocalPositiveSuffix
| LocalNegativePrefix NonNumber LocalNegativeSuffix
Float :
十进制 | HexFloat | SignedNonNumber
在上述正则表达式中,空格并不重要。
从以下版本开始:
1.5
构造一个新的 Scanner ,它生成从指定文件扫描的值。
构造一个新的 Scanner ,它生成从指定文件扫描的值。
构造一个新的 Scanner ,它生成从指定文件扫描的值。
构造一个新的 Scanner ,它生成从指定输入流扫描的值。
构造一个新的 Scanner ,它生成从指定输入流扫描的值。
构造一个新的 Scanner ,它生成从指定输入流扫描的值。
构造一个新的 Scanner ,它生成从指定源扫描的值。
构造一个新的 Scanner ,它生成从指定字符串扫描的值。
构造一个新的 Scanner ,它可以生成从指定通道扫描的值。
构造一个新的 Scanner ,它可以生成从指定通道扫描的值。
构造一个新的 Scanner ,它可以生成从指定通道扫描的值。
构造一个新的 Scanner ,它生成从指定文件扫描的值。
构造一个新的 Scanner ,它生成从指定文件扫描的值。
构造一个新的 Scanner ,它生成从指定文件扫描的值。
关闭此扫描仪。
返回此 Scanner 当前正在用于匹配分隔符的 Pattern。
> findAll(String patString) 返回与提供的模式字符串匹配的匹配结果流。
findAll(Pattern pattern)返回此扫描程序的匹配结果流。
试图在忽略分隔符的情况下查找下一个从指定字符串构造的模式。
试图在忽略分隔符的情况下查找下一个指定模式。
试图在忽略分隔符的情况下查找下一个从指定字符串构造的模式。
试图查找下一个指定模式。
如果此扫描器的输入中有另一个标记,则返回 true。
如果下一个标记与从指定字符串构造的模式匹配,则返回 true。
如果下一个完整标记与指定模式匹配,则返回true。
如果此扫描器输入中的下一个标记可以使用 nextBigDecimal()解释为 BigDecimal,则返回true。
如果此扫描器输入中的下一个标记可以使用 nextBigInteger()在默认基数中解释为 BigInteger ,则返回true。
如果此扫描器输入中的下一个标记可以使用 nextBigInteger()在指定的基数中解释为 BigInteger ,则返回true。
如果使用从字符串“true | false”创建的不区分大小写的模式,可以将此扫描器输入中的下一个标记解释为布尔值,则返回true。
如果使用 nextByte()将此扫描器输入中的下一个标记解释为默认基数中的字节值,则返回true。
如果使用 nextByte()将此扫描器输入中的下一个标记解释为指定基数中的字节值,则返回true。
如果使用 nextDouble()将此扫描仪输入中的下一个标记解释为double值,则返回true。
如果使用 nextFloat()将此扫描器输入中的下一个标记解释为浮点值,则返回true。
如果使用 nextInt()将此扫描器输入中的下一个标记解释为默认基数中的int值,则返回true。
如果此扫描器输入中的下一个标记可以使用 nextInt()解释为指定基数中的int值,则返回true。
如果此扫描器的输入中有另一行,则返回true。
如果使用 nextLong()将此扫描器输入中的下一个标记解释为默认基数中的长值,则返回true。
如果使用 nextLong()可以将此扫描器输入中的下一个标记解释为指定基数中的长值,则返回true。
如果使用 nextShort()可以将此扫描器输入中的下一个标记解释为默认基数中的短值,则返回true。
如果此扫描器输入中的下一个标记可以使用 nextShort()解释为指定基数中的短值,则返回true。
返回 IOException,最后通过此抛出 Scanner的基本 Readable 。
返回此扫描程序的语言环境。
返回此扫描程序执行的上次扫描操作的匹配结果。
从此扫描仪查找并返回下一个完整令牌。
如果它与从指定字符串构造的模式匹配,则返回下一个标记。
如果匹配指定的模式,则返回下一个标记。
将输入的下一个标记扫描为BigDecimal 。
将输入的下一个标记扫描为BigInteger 。
将输入的下一个标记扫描为BigInteger 。
将输入的下一个标记扫描为布尔值并返回该值。
将输入的下一个标记扫描为 byte 。
将输入的下一个标记扫描为 byte 。
将输入的下一个标记扫描为 double 。
将输入的下一个标记扫描为 float 。
将输入的下一个标记扫描为 int 。
将输入的下一个标记扫描为 int 。
使此扫描器前进超过当前行并返回跳过的输入。
将输入的下一个标记扫描为 long 。
将输入的下一个标记扫描为 long 。
将输入的下一个标记扫描为 short 。
将输入的下一个标记扫描为 short 。
返回此扫描器的默认基数。
Iterator的此实现不支持删除操作。
重置此扫描仪。
跳过与指定字符串构造的模式匹配的输入。
跳过与指定模式匹配的输入,忽略分隔符。
从此扫描程序返回分隔符分隔的标记流。
返回此 Scanner的字符串表示 Scanner 。
将此扫描仪的分隔模式设置为从指定的 String构造的模式。
将此扫描仪的分隔模式设置为指定的模式。
将此扫描程序的语言环境设置为指定的语言环境。
将此扫描仪的默认基数设置为指定的基数。
如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。
本文持续更新中。。。