Scanner类

来源:互联网 发布:gta5ol骷髅捏脸数据 编辑:程序博客网 时间:2024/05/29 08:59
(1)Scanner的基本使用方法:
常用构造方法:
Scanner(File source) //构造一个新的Scanner,它生成的值是从指定文件扫描的
Scanner(InputStream source) //构造一个新的 Scanner,它生成的值是从指定的
                             输入流扫描的
Scanner(String source) //构造一个新的Scanner,它生成的值是从指定字符串
                          扫描的。
 
先介绍几个重要的成员方法:
int nextInt(); //将输入信息的下一个标记扫描为一个 int
double nextDouble(); //将输入信息的下一个标记扫描为一个double
...
String nextNext();  //查找并返回来自此扫描器的下一个完整标记(字符串)
String nextLine();  //此扫描器执行当前行,并返回跳过的输入信息
...
boolean hasNext();  //如果此扫描器的输入中有另一个标记,则返回true
boolean hasNext(Pattern pattern); //如果下一个完整标记与指定模式匹配,则
                                   返回true
boolean hasNext(String pattern); //如果下一个标记与从指定字符串构造的模式
                                   匹配,则返回true
boolean hasNextInt(); //如果通过使用nextInt()方法,此扫描器输入信息中的下
                   一个标记可以解释为指定基数中的一个int 值,则返回true。
...
-----
例1:
import java.io.*;
import java.util.*;
 
public class ScannerSample
{
 public static void main(String args[]) throws Exception
 {
  ScannerSample.scan_stdin();
  System.out.println();
  ScannerSample.scan_file();  
 } 
 
 public static void scan_stdin()  //从标准输入中扫描
 {
  Scanner sin = new Scanner(System.in);
  int a;
  long la;
  double da;
  String str = new String();
  
  a = sin.nextInt();
  la = sin.nextLong();
  da = sin.nextDouble();
  str = sin.next();  
  System.out.println(a);
  System.out.println(la);
  System.out.println(da);
  System.out.println(str);
 }
 
 public static void scan_file() throws Exception  //从文件中扫描
 {
  Scanner fin = new Scanner(new FileInputStream("in.txt"));
  
  int a;
  long la;
  double da;
  String str = new String();
      
  a = fin.nextInt();
  la = fin.nextLong();
  da = fin.nextDouble();
  str = fin.next();  
  System.out.println(a);
  System.out.println(la);
  System.out.println(da);
  System.out.println(str);  
 }
}
 
------
例2:
import java.io.*;
import java.util.*;
class ScannerSample
{
 public static void main(String args[]) throws Exception
 {
  ScannerSample.scan_hasnext();
 }
 
 public static void scan_hasnext() throws Exception
 {
  Scanner fin = new Scanner(new FileInputStream("in.txt"));
  
  double sum=0.0;  
  while( fin.hasNext() )
  {
   if( fin.hasNextDouble() )
   {
    sum += fin.nextDouble();    
   }
   else
   {
    if( fin.hasNext("end"))
    {
     break;
    }
    else
    {
     System.out.println("文件格式错!");
     System.out.println("文件应该是任意多个连续数字后接字符串\"end\"的格式.");
     break;
    }
   }
  }
  fin.close();
  
 } 
}
 
 
(2)设置分割符:
Scanner类对象在扫描过程中,默认以空格作为分割符来区分不同的token;我们也可以通过方法useDelimiter(Pattern pattern)来修改分割符。
 
相关方法:
Scanner useDelimiter(Pattern pattern); //将扫描器的分隔模式设置为指定模式
Scanner useDelimiter(String pattern); //将此扫描器的分隔模式设置为从指定
                                       String构造的模式。
 
其中useDelimiter(String pattern)中的参数pattern是一个正规表达式。
如:fin.useDelimiter("abc");
    fin.useDelimiter("##");
    fin.useDelimiter(",,*");
 
例如:
import java.util.*;
class ScannerSample
{
 public static void main(String args[]) throws Exception
 {
  Scanner sin = new Scanner(System.in);  
  sin.useDelimiter("aa*");//以正规表达式“aa*”所表示的字符串为分割符.
  
  int a, b, c;  
  a = sin.nextInt();
  b = sin.nextInt(); 
  c = sin.nextInt();
  System.out.println(a +"\t"+ b +"\t"+ c);  
 }
}
例如,在此程序中,
若键盘输入为:123aaa54344a23435aaaa
则输出为:123    54344    23435