scanner.html

来自「j2se5-api-zh,java文档的中文版本」· HTML 代码 · 共 1,353 行 · 第 1/5 页

HTML
1,353
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!--NewPage--><HTML><HEAD><!-- Generated by javadoc (build 1.5.0_03) on Wed Nov 02 09:51:12 CST 2005 --><META http-equiv="Content-Type" content="text/html; charset=gb2312"><TITLE>Scanner (Java 2 Platform SE 5.0)</TITLE><META NAME="keywords" CONTENT="java.util.Scanner class"><LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style"><SCRIPT type="text/javascript">function windowTitle(){    parent.document.title="Scanner (Java 2 Platform SE 5.0)";}</SCRIPT><NOSCRIPT></NOSCRIPT></HEAD><BODY BGCOLOR="white" onload="windowTitle();"><!-- ========= START OF TOP NAVBAR ======= --><A NAME="navbar_top"><!-- --></A><A HREF="#skip-navbar_top" title="跳过导航链接"></A><TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""><TR><TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"><A NAME="navbar_top_firstrow"><!-- --></A><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">  <TR ALIGN="center" VALIGN="top">  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>概述</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>软件包</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>类</B></FONT>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Scanner.html"><FONT CLASS="NavBarFont1"><B>使用</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>树</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>已过时</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>索引</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>帮助</B></FONT></A>&nbsp;</TD>  </TR></TABLE></TD><TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Java<sup><font size=-2>TM</font></sup>&nbsp;2&nbsp;Platform<br>Standard&nbsp;Ed. 5.0</b></EM></TD></TR><TR><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">&nbsp;<A HREF="ResourceBundle.html" title="java.util 中的类"><B>上一个类</B></A>&nbsp;&nbsp;<A HREF="Set.html" title="java.util 中的接口"><B>下一个类</B></A></FONT></TD><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">  <A HREF="../../index.html@java_2Futil_2FScanner.html" target="_top"><B>框架</B></A>  &nbsp;&nbsp;<A HREF="Scanner.html" target="_top"><B>无框架</B></A>  &nbsp;&nbsp;<SCRIPT type="text/javascript">  <!--  if(window==top) {    document.writeln('<A HREF="../../allclasses-noframe.html"><B>所有类</B></A>');  }  //--></SCRIPT><NOSCRIPT>  <A HREF="../../allclasses-noframe.html"><B>所有类</B></A></NOSCRIPT></FONT></TD></TR><TR><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">  摘要:&nbsp;嵌套&nbsp;|&nbsp;字段&nbsp;|&nbsp;<A HREF="#constructor_summary">构造方法</A>&nbsp;|&nbsp;<A HREF="#method_summary">方法</A></FONT></TD><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">详细信息:&nbsp;字段&nbsp;|&nbsp;<A HREF="#constructor_detail">构造方法</A>&nbsp;|&nbsp;<A HREF="#method_detail">方法</A></FONT></TD></TR></TABLE><A NAME="skip-navbar_top"></A><!-- ========= END OF TOP NAVBAR ========= --><HR><!-- ======== START OF CLASS DATA ======== --><H2><FONT SIZE="-1">java.util</FONT><BR>类 Scanner</H2><PRE><A HREF="../lang/Object.html" title="java.lang 中的类">java.lang.Object</A>  <IMG SRC="../../resources/inherit.gif" ALT="继承者 "><B>java.util.Scanner</B></PRE><DL><DT><B>所有已实现的接口:</B> <DD><A HREF="Iterator.html" title="java.util 中的接口">Iterator</A>&lt;<A HREF="../lang/String.html" title="java.lang 中的类">String</A>&gt;</DD></DL><HR><DL><DT><PRE>public final class <B>Scanner</B><DT>extends <A HREF="../lang/Object.html" title="java.lang 中的类">Object</A><DT>implements <A HREF="Iterator.html" title="java.util 中的接口">Iterator</A>&lt;<A HREF="../lang/String.html" title="java.lang 中的类">String</A>&gt;</DL></PRE><P>一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器。<p><code>Scanner</code> 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 <tt>next</tt> 方法将得到的标记转换为不同类型的值。<p>例如,以下代码使用户能够从 <tt>System.in</tt> 中读取一个数: <blockquote><pre>     Scanner sc = new Scanner(System.in);     int i = sc.nextInt(); </pre></blockquote><p>再看一个例子,以下代码使 <code>long</code> 类型可以通过 <code>myNumbers</code> 文件中的项分配: <blockquote><pre>      Scanner sc = new Scanner(new File("myNumbers"));      while (sc.hasNextLong()) {          long aLong = sc.nextLong();      }</pre></blockquote><p>扫描器还可以使用不同于空白的分隔符。下面是从一个字符串读取若干项的例子:<blockquote><pre>     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(); </pre></blockquote> <p>输出为: <blockquote><pre>     1     2     red     blue </pre></blockquote><p>以下代码使用正则表达式同时分析所有的 4 个标记,并可以产生与上例相同的输出结果:<blockquote><pre>     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(); </pre></blockquote><p>扫描器所使用的默认空白分隔符通过 <A HREF="../lang/Character.html" title="java.lang 中的类"><CODE>Character</CODE></A>.<A HREF="../lang/Character.html#isWhitespace(char)"><CODE>isWhitespace</CODE></A> 来识别。  <p>扫描操作可能被阻塞,而等待信息的输入。<p><A HREF="Scanner.html#next()"><CODE>next()</CODE></A> 和 <A HREF="Scanner.html#hasNext()"><CODE>hasNext()</CODE></A> 方法及其基本类型 companion 方法(如 <A HREF="Scanner.html#nextInt()"><CODE>nextInt()</CODE></A> 和 <A HREF="Scanner.html#hasNextInt()"><CODE>hasNextInt()</CODE></A>)首先跳过与分隔符模式匹配的输入,然后尝试返回下一个标记。在等待更多输入时 <tt>hasNext</tt> 和 <tt>next</tt> 方法都可能阻塞。<tt>hasNext</tt> 方法是否阻塞与其相关的 <tt>next</tt> 方法是否阻塞无关。<p> <A HREF="Scanner.html#findInLine(java.lang.String)"><CODE>findInLine(java.lang.String)</CODE></A>、<A HREF="Scanner.html#findWithinHorizon(java.lang.String, int)"><CODE>findWithinHorizon(java.lang.String, int)</CODE></A> 和 <A HREF="Scanner.html#skip(java.util.regex.Pattern)"><CODE>skip(java.util.regex.Pattern)</CODE></A> 方法的执行与分隔符模式无关。这些方法会尝试匹配与输入中的分隔符无关的指定模式,因此可用于分隔符无关的特殊环境中。在等待更多输入时这些方法可能阻塞。<p>当某一扫描器抛出 <A HREF="InputMismatchException.html" title="java.util 中的类"><CODE>InputMismatchException</CODE></A> 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来检索或跳过它。<p>对于某些类型的分隔模式,可能返回空标记。例如,<tt>"\\s+"</tt> 模式不会返回空标记,因为它与该分隔符的多个实例匹配。而分隔模式 <tt>"\\s"</tt> 可能返回空标记,因为它一次只传递一个空格。<p> 扫描器可以从实现 <A HREF="../lang/Readable.html" title="java.lang 中的接口"><CODE>Readable</CODE></A> 接口的任何对象读取文本。如果对基础 readable 的 <A HREF="../lang/Readable.html#read(java.nio.CharBuffer)"><CODE>Readable.read(java.nio.CharBuffer)</CODE></A> 方法的调用抛出 <CODE>IOException</CODE>,则扫描器认为已经到达了输入的结尾。基础 readable 最新抛出的 <tt>IOException</tt> 可以通过 <A HREF="Scanner.html#ioException()"><CODE>ioException()</CODE></A> 方法检索。<p>如果 <code>Scanner</code> 关闭,且其输入源实现 <CODE>Closeable</CODE> 接口,则该输入源也将关闭。<p>若没有外部同步,则 <code>Scanner</code> 的多线程使用是不安全的。<p>除非另行说明,否则将一个 <code>null</code> 参数传递到 <code>Scanner</code> 的任何一个方法中都将抛出 <code>NullPointerException</code>。<p>默认情况下扫描器会将数字解释为十进制形式,除非已经使用 <A HREF="Scanner.html#useRadix(int)"><CODE>useRadix(int)</CODE></A> 方法设置了不同的基数。 <a name="localized-numbers"><h4> 本地化数字 </h4><p> 此类的一个实例能够以标准格式以及扫描器语言环境的格式扫描数字。扫描器的初始语言环境是 <A HREF="Locale.html#getDefault()"><CODE>Locale.getDefault()</CODE></A> 方法返回的值;它可以通过 <A HREF="Scanner.html#useLocale(java.util.Locale)"><CODE>useLocale(java.util.Locale)</CODE></A> 方法更改。<p>本地化格式是根据以下参数定义的,对于某一特定语言环境来说,这些参数取自该语言环境的 <CODE>DecimalFormat</CODE> 对象 <tt>df</tt>,及其 <CODE>DecimalFormatSymbols</CODE> 对象 <tt>dfs</tt>。 <blockquote><table> <tr><td valign="top"><i>LocalGroupSeparator&nbsp;&nbsp;</i></td>     <td valign="top">用于分隔数千个组的字符,<i>即</i>&nbsp;<tt>dfs.</tt><CODE>getGroupingSeparator()</CODE></td></tr><tr><td valign="top"><i>LocalDecimalSeparator&nbsp;&nbsp;</i></td>    <td valign="top">用于小数点的字符,<i>即</i>&nbsp;<tt>dfs.</tt><CODE>getDecimalSeparator()</CODE></td></tr><tr><td valign="top"><i>LocalPositivePrefix&nbsp;&nbsp;</i></td>    <td valign="top">出现在正数前的字符串(可以为空),<i>即</i>&nbsp;<tt>df.</tt><CODE>getPositivePrefix()</CODE></td></tr><tr><td valign="top"><i>LocalPositiveSuffix&nbsp;&nbsp;</i></td>    <td valign="top">出现在正数后的字符串(可以为空),<i>即</i>&nbsp;<tt>df.</tt><CODE>getPositiveSuffix()</CODE></td></tr><tr><td valign="top"><i>LocalNegativePrefix&nbsp;&nbsp;</i></td>    <td valign="top">出现在负数前的字符串(可以为空),<i>即</i>&nbsp;<tt>df.</tt><CODE>getNegativePrefix()</CODE></td></tr><tr><td valign="top"><i>LocalNegativeSuffix&nbsp;&nbsp;</i></td>    <td valign="top">出现在负数后的字符串(可以为空),<i>即</i>&nbsp;<tt>df.</tt><CODE>getNegativeSuffix()</CODE></td></tr><tr><td valign="top"><i>LocalNaN&nbsp;&nbsp;</i></td>    <td valign="top">表示浮点值的非数字的字符串,<i>即</i>&nbsp;<tt>dfs.</tt><CODE>getInfinity()</CODE></td></tr><tr><td valign="top"><i>LocalInfinity&nbsp;&nbsp;</i></td>    <td valign="top">表示浮点值的无穷大的字符串,<i>即</i>&nbsp;<tt>dfs.</tt><CODE>getInfinity()</CODE></td></tr></table></blockquote> <a name="number-syntax"><h4> 数字语法 </h4><p> 可通过此类的一个实例分析为数字的字符串是根据以下正则表达式语法指定的,在这种情况下 Rmax 是正在使用的基数中的最高数字(例如,在基数 10 中 Rmax 为 9)。 <p> <table cellspacing=0 cellpadding=0 align=center>    <tr><td valign=top align=right><i>NonASCIIDigit</i>&nbsp;&nbsp;::</td>       <td valign=top>= 非 ASCII 字符 c,对于它,<A HREF="../lang/Character.html#isDigit(char)"><CODE>Character.isDigit</CODE></A><tt>(c)</tt> 返回 true</td></tr>    <tr><td>&nbsp;</td></tr>    <tr><td align=right><i>Non0Digit</i>&nbsp;&nbsp;::</td>   <td><tt>= [1-</tt><i>Rmax</i><tt>] | </tt><i>NonASCIIDigit</i></td></tr>    <tr><td>&nbsp;</td></tr>    <tr><td align=right><i>Digit</i>&nbsp;&nbsp;::</td>   <td><tt>= [0-</tt><i>Rmax</i><tt>] | </tt><i>NonASCIIDigit</i></td></tr>    <tr><td>&nbsp;</td></tr>    <tr><td valign=top align=right><i>GroupedNumeral</i>&nbsp;&nbsp;::</td>       <td valign=top>         <table cellpadding=0 cellspacing=0>           <tr><td><tt>= (&nbsp;</tt></td>               <td><i>Non0Digit</i><tt>                   </tt><i>Digit</i><tt>?                   </tt><i>Digit</i><tt>?</tt></td></tr>           <tr><td></td>               <td><tt>(&nbsp;</tt><i>LocalGroupSeparator</i><tt>                         </tt><i>Digit</i><tt>                         </tt><i>Digit</i><tt>                         </tt><i>Digit</i><tt> )+ )</tt></td></tr>         </table></td></tr>    <tr><td>&nbsp;</td></tr>    <tr><td align=right><i>Numeral</i>&nbsp;&nbsp;::</td>       <td><tt>= ( ( </tt><i>Digit</i><tt>+ )               | </tt><i>GroupedNumeral</i><tt> )</tt></td></tr>    <tr><td>&nbsp;</td></tr>   <tr><td valign=top align=right>         <a name="Integer-regex"><i>Integer</i>&nbsp;&nbsp;::</td>       <td valign=top><tt>= ( [-+]? ( </tt><i>Numeral</i><tt>                               ) )</tt></td></tr>   <tr><td></td>       <td><tt>| </tt><i>LocalPositivePrefix</i><tt> </tt><i>Numeral</i><tt>                      </tt><i>LocalPositiveSuffix</i></td></tr>   <tr><td></td>       <td><tt>| </tt><i>LocalNegativePrefix</i><tt> </tt><i>Numeral</i><tt>                 </tt><i>LocalNegativeSuffix</i></td></tr>    <tr><td>&nbsp;</td></tr>    <tr><td align=right><i>DecimalNumeral</i>&nbsp;&nbsp;::</td>       <td><tt>= </tt><i>Numeral</i></td></tr>   <tr><td></td>       <td><tt>| </tt><i>Numeral</i><tt>                 </tt><i>LocalDecimalSeparator</i><tt>                 </tt><i>Digit</i><tt>*</tt></td></tr>   <tr><td></td>       <td><tt>| </tt><i>LocalDecimalSeparator</i><tt>                 </tt><i>Digit</i><tt>+</tt></td></tr>    <tr><td>&nbsp;</td></tr>    <tr><td align=right><i>Exponent</i>&nbsp;&nbsp;::</td>       <td><tt>= ( [eE] [+-]? </tt><i>Digit</i><tt>+ )</tt></td></tr>    <tr><td>&nbsp;</td></tr> 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?