/*
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);
}
}
}
分享到:
相关推荐
在此示例中,`StreamTokenizer`用于解析输入流中的每个词法单元,而`PrintWriter`则提供了一个更为灵活的方式来控制输出格式。`out.flush()`方法用于确保所有缓冲区的数据都被刷新输出。 #### 2. 大数/高精度计算 ...
- Java的I/O流处理文件读写,如StreamTokenizer和StringTokenizer用于处理文本数据。第6章的题目要求从键盘输入和文件读写,使用了Java的文件I/O类。 10. **集合框架**: - 集合(Collections)框架包括数组、...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单...
10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单...