Scanner 的进一步学习和与StreamTokenizer的学习

来源:互联网 发布:gaga软件下载 编辑:程序博客网 时间:2024/06/10 01:55
Scanner:
Scanner的构造函数有5个重载版本,分别接受一个实参,实参的类型可以是下面的任一种:

InputStream,File,ReadableByteChannel,Readable,String

 写了一个测试程序,如下:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in) ;
//scan.useDelimiter("exit");
int count = scan.nextInt() ;
String str = scan.nextLine();
System.out.println(str) ;
}
不知何原因,网上搜索了一下,很过这方面的讲解,先罗列如下:以为scan.nextInt(),只是读取了一个整型值,在键盘上敲击的硬回车符并没有被count接受,所以造成的结果就是剩余一个回车符,当程序进行到scan.nextLine()时,str只是接受了一个回车符。
当使用String str = scan.next() 时,需要人为指定一个结束符,此时可以用到,scan.useDelimiter("exit") ;表示字符串读到到此第一个“exit”处结束。
String str = scan.nextLine() ;读入一行字符串。

StreamTokenizer:

字段摘要:

double  navl  ------>  如果当前标记是一个数字,则此字段将包含该数字的值。

String sval ------>  如果当前标记是一个文字标记,则此字段包含一个给出该文字标记的字符的字符串。

static int TT_EOF ------>指示已读到流末尾的常量。

static int  TT_EOL ------->指示已读到行末尾的常量。

static int TT_NUMBER------->指示已读到一个数字标记的常量。

static int TT_WORD -------> 指示已读到一个文字标记的常量。

int ttype  --------> 在调用 nextToken() 方法之后,此字段将包含刚读取的标记的类型。

The StreamTokenizer class takes an input stream and parses it into "tokens", allowing the tokens to be read one at a time,这些符号的拆分是按照空格来确定的。

public static void main(String[] args) {
 int type;
  StreamTokenizer tok = new StreamTokenizer(new BufferedReader(
    new InputStreamReader(System.in)));
  System.out.println("please input :");
  try {
   while((type=tok.nextToken())!=tok.TT_EOL){
    if(type==tok.TT_NUMBER){
     System.out.println(tok.nval);
    }else if(type==tok.TT_WORD){
     if(tok.sval.equalsIgnoreCase("exit"))
     {
      System.exit(1);
     }
     System.out.println(tok.sval);
    }
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
}
总结:Scanner 和StreamTokenizer的区别如上

原创粉丝点击