Scanner 类

定义

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

[Android.Runtime.Register("java/util/Scanner", DoNotGenerateAcw=true)]
public sealed class Scanner : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, 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
继承
Scanner
属性
实现

注解

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

使用 Scanner 分隔符模式将其输入拆分为标记,该模式默认匹配空格。 然后,可以使用各种 next 方法将生成的令牌转换为不同类型的值。

例如,此代码允许用户从 System.in读取数字: <blockquote>

{@code
                Scanner sc = new Scanner(System.in);
                int i = sc.nextInt();
            }

</blockquote>

作为另一个示例,此代码允许 long 从 文件中 myNumbers的条目中分配类型: <blockquote>

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

</blockquote>

扫描程序还可以使用空格以外的分隔符。 此示例从字符串中读取多个项: <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>

打印以下输出: <blockquote>

{@code
                1
                2
                red
                blue
            }

</blockquote>

可以使用此代码生成相同的输出,该代码使用正则表达式一次分析所有四个标记: <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();
            }

</blockquote>

扫描程序使用的“default-delimiter”>默认空格分隔符被识别 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基础可读的最新引发的 。

Scanner关闭 时,如果源实现 java.io.Closeable 接口,它将关闭其输入源。

Scanner在没有外部同步的情况下,对于多线程使用是不安全的。

除非另有说明,否则 null 将参数传递到 的任何方法 Scanner 都将导致 NullPointerException 引发 。

除非使用 #useRadix 方法设置了不同的基数,否则扫描程序将默认将数字解释为十进制数。 方法 #reset 会将扫描仪的基数的值重置为 10 ,而不管它以前是否更改过。

<h2> “localized-numbers”>本地化数字</h2>

此类的实例能够扫描标准格式以及扫描程序区域设置格式的数字。 扫描程序的“initial-locale”>初始区域设置是由 方法返回 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>用于分隔数千个组的字符,  dfs.java.text.DecimalFormatSymbols#getGroupingSeparator getGroupingSeparator()<dt>LocalDecimalSeparator  <dd>用于小数点的字符,  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>LocalNaN  <dd>表示浮点值的非数字的字符串,  dfs.java.text.DecimalFormatSymbols#getNaN getNaN()<dt>LocalInfinity  (2 nbsp;<dd>表示浮点值的无穷大字符串,  dfs.java.text.DecimalFormatSymbols#getInfinity getInfinity()</dl></blockquote>

<h3> “number-syntax”>Number syntax</h3>

此类的实例可以解析为数字的字符串是按照以下正则表达式语法指定的,其中 Rmax 是正则 (基数中的最高数字,例如,Rmax 在 base 10) 中为 9。

<dl><dt>NonAsciiDigit: <dd>非 ASCII 字符 c,其 java.lang.Character#isDigit Character.isDigit(c) 返回 真

<dt>Non0Digit: <dd[1->Rmax] |NonASCIIDigit<dt>Digit: <dd[0->Rmax] |NonASCIIDigit<dt>GroupedNumeral: <dd>(&nbsp;Non0DigitDigit?Digit?<dd>    (&nbsp;LocalGroupSeparatorDigitDigit)+ )<dt>Numeric: <dd( (>Digit+ ) |GroupedNumeral)<dt>“Integer-regex”><i>Integer</i>:<dd( [-+]? (>Numeric) )<dd|>LocalPositivePrefixNumericLocalPositiveSuffix<dd>|LocalNegativePrefix数字LocalNegativeSuffix<dt>DecimalNumeral: <dd>数字<dd>|数字LocalDecimalSeparatorDigit*<dd>|LocalDecimalSeparatorDigit+<dt>Exponent: <dd>( [eE] [+-]?Digit+ )<dt>“Decimal-regex”><i>Decimal</i>:<dd>( [-+]?DecimalNumeral指数? )<dd>|LocalPositivePrefixDecimalNumeralLocalPositiveSuffixExponent?<dd|>LocalNegativePrefixDecimalNumeralLocalNegativeSuffixExponent?<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>|LocalPositivePrefixNonNumberLocalPositiveSuffix<dd|>LocalNegativePrefixNonNumberLocalNegativeSuffix<dt>“Float-regex”><i>Float</i>: <dd>Decimal|HexFloat|SignedNonNumber</dl>

空格在上述正则表达式中并不重要。

在 1.5 中添加。

java.util.ScannerJava 文档。

此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。

构造函数

Scanner(File)

构造一个新的 Scanner ,它生成从指定文件扫描的值。

Scanner(File, Charset)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

Scanner(File, String)

构造一个新的 Scanner ,它生成从指定文件扫描的值。

Scanner(IPath)

构造一个新的 Scanner ,它生成从指定文件扫描的值。

Scanner(IPath, Charset)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

Scanner(IPath, String)

构造一个新的 Scanner ,它生成从指定文件扫描的值。

Scanner(IReadable)

构造一个新的 Scanner ,它生成从指定源扫描的值。

Scanner(IReadableByteChannel)

构造一个新的 Scanner ,它生成从指定通道扫描的值。

Scanner(IReadableByteChannel, Charset)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

Scanner(IReadableByteChannel, String)

构造一个新的 Scanner ,它生成从指定通道扫描的值。

Scanner(Stream)

构造一个新的 Scanner ,它生成从指定输入流扫描的值。

Scanner(Stream, Charset)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

Scanner(Stream, String)

构造一个新的 Scanner ,它生成从指定输入流扫描的值。

Scanner(String)

构造一个新的 Scanner ,它生成从指定字符串扫描的值。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
HasNext

如果此扫描程序的输入中包含另一个标记,则返回 true。

HasNextBigDecimal

如果可以使用 方法将此扫描程序的输入中的下一个标记解释为 ,BigDecimal#nextBigDecimal则返回 true。

HasNextBigInteger

如果可以使用 方法将此扫描程序输入中的下一个 BigInteger 标记解释为默认基数 #nextBigInteger 中的 ,则返回 true。

HasNextBoolean

如果可以使用从字符串“true|false”创建的不区分大小写的模式将此扫描程序的输入中的下一个标记解释为布尔值,则返回 true。

HasNextByte

如果可以使用 方法将此扫描程序的输入中的下一个标记解释为默认基数 #nextByte 中的字节值,则返回 true。

HasNextDouble

如果可以使用 方法将此扫描程序的输入中的下一个标记解释为双精度值, #nextDouble 则返回 true。

HasNextFloat

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

HasNextInt

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

HasNextLine

如果此扫描程序的输入中有另一行,则返回 true。

HasNextLong

如果可以使用 方法将此扫描程序输入中的下一个标记解释为默认基数 #nextLong 中的长值,则返回 true。

HasNextShort

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

JniIdentityHashCode

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
JniPeerMembers

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

PeerReference

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
ThresholdClass

此 API 支持 Mono for Android 基础结构,不应直接从代码使用。

(继承自 Object)
ThresholdType

此 API 支持 Mono for Android 基础结构,不应直接从代码使用。

(继承自 Object)

方法

Clone()

创建并返回此对象的副本。

(继承自 Object)
Close()

关闭此扫描程序。

Delimiter()

返回 Pattern 当前 Scanner 用于匹配分隔符的 。

Dispose()

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
Dispose(Boolean)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
Equals(Object)

指示其他某个对象是否“等于”此对象。

(继承自 Object)
FindInLine(Pattern)

尝试查找指定模式的下一个匹配项,忽略分隔符。

FindInLine(String)

尝试查找从指定字符串构造的模式的下一个匹配项,忽略分隔符。

FindWithinHorizon(Pattern, Int32)

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

FindWithinHorizon(String, Int32)

尝试查找从指定字符串构造的模式的下一个匹配项,忽略分隔符。

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
InvokeHasNext(Pattern)

如果下一个完整标记与指定的模式匹配,则返回 true。

InvokeHasNext(String)

如果下一个标记与从指定字符串构造的模式匹配,则返回 true。

InvokeHasNextBigInteger(Int32)

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

InvokeHasNextByte(Int32)

如果可以使用 方法将此扫描程序的输入中的下一个标记解释为指定基数 #nextByte 中的字节值,则返回 true。

InvokeHasNextInt(Int32)

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

InvokeHasNextLong(Int32)

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

InvokeHasNextShort(Int32)

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

IoException()

返回 IOExceptionScanner的基础 Readable引发的最后一个 。

JavaFinalize()

当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用。

(继承自 Object)
Locale()

返回此扫描程序的区域设置。

Match()

返回此扫描程序执行的最后一个扫描操作的匹配结果。

Next()

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

Next(Pattern)

如果下一个标记与指定的模式匹配,则返回该标记。

Next(String)

如果与从指定字符串构造的模式匹配,则返回下一个标记。

NextBigDecimal()

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

NextBigInteger()

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

NextBigInteger(Int32)

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

NextBoolean()

将输入的下一个标记扫描为布尔值,并返回该值。

NextByte()

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

NextByte(Int32)

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

NextDouble()

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

NextFloat()

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

NextInt()

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

NextInt(Int32)

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

NextLine()

将此扫描程序推进到当前行,并返回跳过的输入。

NextLong()

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

NextLong(Int32)

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

NextShort()

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

NextShort(Int32)

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

Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
Radix()

返回此扫描程序的默认基数。

Remove()

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

Reset()

重置此扫描程序。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
Skip(Pattern)

跳过与指定模式匹配的输入,忽略分隔符。

Skip(String)

跳过与从指定字符串构造的模式匹配的输入。

ToArray<T>()

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
UseDelimiter(Pattern)

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

UseDelimiter(String)

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

UseLocale(Locale)

将此扫描程序的区域设置设置为指定的区域设置。

UseRadix(Int32)

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

Wait()

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<>

(继承自 Object)
Wait(Int64)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)
Wait(Int64, Int32)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)

显式接口实现

IIterator.Next()

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

IJavaPeerable.Disposed()

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
IJavaPeerable.Finalized()

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

(继承自 Object)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

GetJniTypeName(IJavaPeerable)

可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。

适用于