StreamTokenizer (流标记) 示例

原创 2006年06月26日 08:55:00

/*

wordChars( )方法用来指定可以用于字的字符范围。它的通常形式如下:

void wordChars(int start, int end)
这里,start和end指定了有效字符的范围。程序中,从33到255范围内的字符都是有效字符。
空格符由 whitespaceChars( )说明。它的一般形式如下:
void whitespaceChars(int start, int end)
这里,start和end指定了有效空格符的范围。下一个标记通过调用nextToken( )从输入流获得,它返回标记的类型。StreamTokenizer定义个四个int型常量:TT_EOF,TT_EOL,TT_NUMBER和TT_WORD。有三个实例变量。nval是一个公开的double 型变量,用来保存可识别的字数的值。sval是一个public String 型变量,用来保存可识别的的字的值。ttype是一个int型变量,说明刚刚被nextToken( )方法读取的标记的类型。如果标记是一个字,ttype等于TT_WORD。如果标记为一个数,ttype等于TT_NUMBER。如果标记是单一字符,ttype包含该字符的值。如果遇到一个行结束情况,ttype等于TT_EOL(这假定了参数为true调用eolIsSignificant())。如果遇到流的结尾,ttype 等于TT_EOF。
*/

//Enhanced word count program that uses a StreamTokenizer.
import java.io.*;
class STWordCount{
 public static int intWords = 0;
 public static int intLines = 0;
 public static int intChars = 0;
 public static void wc(Reader r) throws IOException{
  StreamTokenizer tok = new StreamTokenizer(r);
  tok.resetSyntax();
  tok.wordChars(33,255);
  tok.whitespaceChars(0,' ');
  tok.eolIsSignificant(true);
  while(tok.nextToken() != tok.TT_EOF){
   switch(tok.ttype){
    case tok.TT_EOL:  //不知道为什么会报错
     intLines++;
        intChars++;
     break;
    case tok.TT_WORD:  //不知道为什么会报错
     intWords++;
    default: 
     intChars += tok.sval.length();
   }
  }
 }
 public static void main(String[] args)
 {
  if(args.length == 0){
   try{
    wc(new InputStreamReader(System.in));
    System.out.println(intLines + " " + intWords + " " + intChars);
   }catch(IOException e){
    
   }
  }else{
   int tWords = 0,tLines = 0,tChars = 0;
   for(int i =0;i<args.length;i++){
    try{
     intWords = intLines = intChars = 0;
     wc(new FileReader(args[i]));
     tWords += intWords;
     tLines += intLines;
     tChars += intChars;
     System.out.println(args[i] + ": " +intLines+ " " + intWords + " " + intChars);
    }catch(IOException e){
     System.out.println(args[i] +":error.");
    }
   }
   System.out.println("Total :" +tLines+ " " + tWords + " " + tChars);
  }
 }
}

相关文章推荐

JSP之自定义标记示例程序

  • 2009年05月19日 09:21
  • 28KB
  • 下载

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

转载自:http://www.cnblogs.com/YingYue/p/6118972.html 主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解 以svn为...

多示例多标记学习

  • 2014年07月10日 21:44
  • 1.05MB
  • 下载

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

 财经大爆炸 2016-11-30 19:05 以svn为例,git的master相当于trunk,dev分支相当于branches --------------------------...

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

以svn为例,git的master相当于trunk,dev分支相当于branches ------------------------------------------------------...
  • Apeopl
  • Apeopl
  • 2017年01月10日 14:14
  • 171

[bigdata-83] python3+图数据库neo4j 电话号码 身份证 黑名单 创建节点 标签 关系 增标记 增关系 查询pattern示例

#!/usr/bin/env python3 #!-*- coding:utf-8 -*- from neo4j.v1 import GraphDatabase uri = "bolt://ttt...

StreamTokenizer类的一些说明

一直以来,我们都知道字符串的分割最常用的是java.util.StringTokenizer,但是某些时候,StringTokenizer有很大的局限性。    StreamTokenizer定义了...

java StreamTokenizer使用

注意:用JAVA解题一般用Scanner类来进行输入,但对时间要求严格的题,用它可能会超时,我、解POJ1823的时候就遇到这样的问题,后改用StreamTokenizer类进行输入,就过了。看来后者...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:StreamTokenizer (流标记) 示例
举报原因:
原因补充:

(最多只允许输入30个字)