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>

扫描程序使用的“默认分隔符”>默认空格分隔符被识别。Character#isWhitespace(char) Character.isWhitespace() 无论以前是否已更改,该方法 #reset reset() 都将扫描程序的分隔符的值重置为默认空格分隔符。

扫描操作可能会阻止等待输入。

#next#hasNext方法及其配套方法(如#nextInt#hasNextInt)首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个标记。 next()这两hasNext()种方法都可能会阻止等待进一步输入。 方法块是否 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 接口,它将关闭其输入源。

对于没有外部同步的多线程使用,A Scanner 不安全。

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

除非使用 #useRadix 该方法设置了不同的弧度,否则扫描程序将默认将数字解释为十进制数。 无论以前是否已更改,该方法 #reset 都将重置扫描程序的弧度 10 值。

<h2> “localized-numbers”>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 DecimalFormatSymbolsdfs

<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>出现在正数(可能为空)之前的字符串, nbsp;df.java.text.DecimalFormat#getPositivePrefix getPositivePrefix()<dt>LocalPositiveSuffix  <dd>正数后显示的字符串(可能为空), nbsp;df.java.text.DecimalFormat#getPositiveSuffix getPositiveSuffix()<dt>LocalNegativePrefix  <dd>负数之前显示的字符串(可能为空), nbsp;df.java.text.DecimalFormat#getNegativePrefix getNegativePrefix()<dt>LocalNegativeSuffix  <dd>负数后显示的字符串(可能为空), nbsp;df.java.text.DecimalFormat#getNegativeSuffix getNegativeSuffix()<dt>LocalNaN  <dd>表示浮点值的非数字的字符串, 例如,nbsp;dfs.java.text.DecimalFormatSymbols#getNaN getNaN()<dt>LocalInfinity  <dd>表示浮点值的无穷大字符串, 例如,nbsp;dfs.java.text.DecimalFormatSymbols#getInfinity getInfinity()</dl></blockquote>

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

此类实例可以分析为数字的字符串按以下正则表达式语法指定,其中 Rmax 是正在使用的弧度中最高的数字(例如,Rmax 为 9(以基 10 为单位)。

<dl><dt>NonAsciiDigit: <dd>A non-ASCII character c, for which java.lang.Character#isDigit Character.isDigit(c) returns true

<dt>Non0Digit: <dd[1->RmaxNonASCIIDigit<dt>Digit: <dd>[0-Rmax] |] |NonASCIIDigitdt>GroupedNumeral: <dd>(&nbsp;Non0Digit<Digit??<dd>    (&nbsp;LocalGroupSeparator数字数字)+ )<数字 dt>数字:<dd>( (Digit+ ) |GroupedNumeral)<dt>“Integer-regex”><i>Integer</i>:<dd( [-+]? (>Digit) )<dd|>LocalPositivePrefixDigitLocalPositiveSuffix<dd>|LocalNegativePrefix数字LocalNegativeSuffix<dt>DecimalNumeral: <dd>数字 dd>|数字<LocalDecimalSeparatorDigit*<dd|>LocalDecimalSeparatorDigit+<dt>Exponent: <dd>( [eE] [+-]?Digit+ )<dt>“Decimal-regex”><i>Decimal</i>:<dd>( [-+]?DecimalNumeralExponent? )<dd>|LocalPositivePrefixDecimalNumeralLocalPositiveSuffixExponent?<dd>|LocalNegativePrefixDecimalNumeralLocalNegativeSuffixExponent?<dt>HexFloat: dd dt>NonNumber: <<dd<>NaN |>[-+]? 0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+ ([pP][-+]?[0-9]+)?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文档java.util.Scanner

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

构造函数

名称 说明
Scanner(File, Charset)

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

Scanner(File, String)

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

Scanner(File)

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

Scanner(IPath, Charset)

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

Scanner(IPath, String)

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

Scanner(IPath)

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

Scanner(IReadable)

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

Scanner(IReadableByteChannel, Charset)

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

Scanner(IReadableByteChannel, String)

构造一个新 Scanner 函数,用于生成从指定通道扫描的值。

Scanner(IReadableByteChannel)

构造一个新 Scanner 函数,用于生成从指定通道扫描的值。

Scanner(Stream, Charset)

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

Scanner(Stream, String)

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

Scanner(Stream)

构造一个新 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)

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

InvokeHasNextLong(Int32)

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

InvokeHasNextShort(Int32)

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

IoException()

返回此Scanner基础Readable引发的最后一IOException个 。

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, Int32)

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

(继承自 Object)
Wait(Int64)

使当前线程等待直到唤醒,通常是通过 <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)

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

获取实例 self类型的 JNI 名称。

JavaAs<TResult>(IJavaPeerable)

尝试强制self键入TResult,检查强制是否在Java端有效。

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

TryJavaCast<TResult>(IJavaPeerable, TResult)

尝试强制self键入TResult,检查强制是否在Java端有效。

适用于