Scanner 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。
[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
分隔符模式将其输入拆分为标记,该模式默认匹配空格。 然后,可以使用各种 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>(
Non0DigitDigit?
Digit?
<dd> (
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 中添加。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
构造函数
Scanner(File) |
构造一个新的 |
Scanner(File, Charset) |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 |
Scanner(File, String) |
构造一个新的 |
Scanner(IPath) |
构造一个新的 |
Scanner(IPath, Charset) |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 |
Scanner(IPath, String) |
构造一个新的 |
Scanner(IReadable) |
构造一个新的 |
Scanner(IReadableByteChannel) |
构造一个新的 |
Scanner(IReadableByteChannel, Charset) |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 |
Scanner(IReadableByteChannel, String) |
构造一个新的 |
Scanner(Stream) |
构造一个新的 |
Scanner(Stream, Charset) |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 |
Scanner(Stream, String) |
构造一个新的 |
Scanner(String) |
构造一个新的 |
属性
Class |
返回此 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
HasNext |
如果此扫描程序的输入中包含另一个标记,则返回 true。 |
HasNextBigDecimal |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为 , |
HasNextBigInteger |
如果可以使用 方法将此扫描程序输入中的下一个 |
HasNextBoolean |
如果可以使用从字符串“true|false”创建的不区分大小写的模式将此扫描程序的输入中的下一个标记解释为布尔值,则返回 true。 |
HasNextByte |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为默认基数 |
HasNextDouble |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为双精度值, |
HasNextFloat |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为浮点值, |
HasNextInt |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为默认基数 |
HasNextLine |
如果此扫描程序的输入中有另一行,则返回 true。 |
HasNextLong |
如果可以使用 方法将此扫描程序输入中的下一个标记解释为默认基数 |
HasNextShort |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为默认基数 |
JniIdentityHashCode |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 (继承自 Object) |
JniPeerMembers |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 |
PeerReference |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 (继承自 Object) |
ThresholdClass |
此 API 支持 Mono for Android 基础结构,不应直接从代码使用。 (继承自 Object) |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不应直接从代码使用。 (继承自 Object) |
方法
Clone() |
创建并返回此对象的副本。 (继承自 Object) |
Close() |
关闭此扫描程序。 |
Delimiter() |
返回 |
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) |
如果可以使用 方法将此扫描程序的输入中的下一个 |
InvokeHasNextByte(Int32) |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为指定基数 |
InvokeHasNextInt(Int32) |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为指定基数中的 int 值, |
InvokeHasNextLong(Int32) |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为指定基数 |
InvokeHasNextShort(Int32) |
如果可以使用 方法将此扫描程序的输入中的下一个标记解释为指定基数中的短值, |
IoException() |
返回 |
JavaFinalize() |
当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
Locale() |
返回此扫描程序的区域设置。 |
Match() |
返回此扫描程序执行的最后一个扫描操作的匹配结果。 |
Next() |
从此扫描程序查找并返回下一个完整令牌。 |
Next(Pattern) |
如果下一个标记与指定的模式匹配,则返回该标记。 |
Next(String) |
如果与从指定字符串构造的模式匹配,则返回下一个标记。 |
NextBigDecimal() |
将输入的下一个 |
NextBigInteger() |
将输入的下一个 |
NextBigInteger(Int32) |
将输入的下一个 |
NextBoolean() |
将输入的下一个标记扫描为布尔值,并返回该值。 |
NextByte() |
将输入的下一个 |
NextByte(Int32) |
将输入的下一个 |
NextDouble() |
将输入的下一个 |
NextFloat() |
将输入的下一个 |
NextInt() |
将输入的下一个 |
NextInt(Int32) |
将输入的下一个 |
NextLine() |
将此扫描程序推进到当前行,并返回跳过的输入。 |
NextLong() |
将输入的下一个 |
NextLong(Int32) |
将输入的下一个 |
NextShort() |
将输入的下一个 |
NextShort(Int32) |
将输入的下一个 |
Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
Radix() |
返回此扫描程序的默认基数。 |
Remove() |
的此实现 |
Reset() |
重置此扫描程序。 |
SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
Skip(Pattern) |
跳过与指定模式匹配的输入,忽略分隔符。 |
Skip(String) |
跳过与从指定字符串构造的模式匹配的输入。 |
ToArray<T>() |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 (继承自 Object) |
ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
UnregisterFromRuntime() |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 (继承自 Object) |
UseDelimiter(Pattern) |
将此扫描程序的分隔模式设置为指定的模式。 |
UseDelimiter(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) |
可以使用正则表达式分析基元类型和字符串的简单文本扫描程序。 |