现在的位置: 首页 > 综合 > 正文

StreamTokenizer (流标记) 示例

2013年09月02日 ⁄ 综合 ⁄ 共 1792字 ⁄ 字号 评论关闭

/*

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);
  }
 }
}

抱歉!评论已关闭.