转自http://t.csdn.cn/U1OVa
StreamTokenizer类和PrintWriter类的介绍
StreamTokenizer类
StreamTokenizer类接收输入流并将其解析为“令牌”,允许一次读取一个令牌。 解析过程由表和多个可以设置为各种状态的标志来控制。 流标记器可以识别标识符,数字,引用的字符串和各种注释样式。
从输入流读取的每个字节被视为’\u0000’至’\u00FF’范围内的’\u0000’ ‘\u00FF’ 。 字符值用于查找字符的五个可能属性: 空格 , 字母 , 数字 , 字符串引号和注释字符 。 每个角色都可以有零个或多个这些属性。
注意:使用StreamTokenizer类要记得抛出I/O异常
PrintWriter类
将对象的格式表示打印到文本输出流。 这个类实现了全部在发现print种方法PrintStream 。 它不包含用于编写原始字节的方法,程序应使用未编码的字节流。
不像PrintStream类,如果启用自动刷新,它只会在调用的println,printf,或format方法来完成,而不是当一个换行符恰好是输出。 这些方法使用平台自己的行分隔符而不是换行符。
这个类中的方法不会抛出I / O异常,尽管它的一些构造函数可能。 客户可以通过调用checkError()查询是否发生错误。
StreamTokenizer类的使用
下面简单介绍一下StreamTokenizer类的注意事项
(1)我们在使用StreamTokenizer类时,我们要导入io包,它是io包中的类
(2)在使用这个类时,函数要抛出IOException异常(throws IOException)
(3)每一次读入之前都要用nextToken()方法获取下一个数据
(4)读取数据的方法,sval方法读取字符串类型(以空格或者换行分隔),nval方法读取数字类型数据。读取字符串类型的数据时,一次只能读一个字符串,读取数字类型的数据时,默认为double类型
(5)StreamTokenizer类使用的具体写法
import java.io.*;
public class test {
public static void main(String args[]) throws IOException{
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.nextToken();
String str = st.sval;//读取String类型数据
st.nextToken();
double num1 = st.nval;//读取double类型数据
st.nextToken();
int num2 = (int)st.nval;//读取int类型数据
st.nextToken();
long num3 = (long)st.nval;//读取long类型数据
}
}
在这里我们可以看到,我们每读一个数据就要用一次 nextToken()方法。这个方法是我们每次读入数据之前必须要写的,也就是我们读入一个数据之前就要写一个这个方法才行
如果我们只想读字符串怎么办?
当我们只读字符串的时候我们就不需要加StreamTokenizer类
我们可以直接写成 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
import java.io.*;
public class test {
public static void main(String args[]) throws IOException{
// StreamTokenizer re = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
String x = re.readLine();
System.out.println(x);
}
}
当我们使用这种方法的时候就可以一次性读取一大串带空格的字符串了,而且还不用和前面一样,每读一次就使用一次 nextToken()方法
PrintWriter类的使用
PrintWriter类的使用相对而言比较简单,就是把我们平时的输出的System.out替换成对应的快输出的实例对象名,唯一需要比较注意的就是最后记得flush()
代码如下:
import java.io.*;
public class test {
public static void main(String args[]){
PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
pw.print();//不换行输出
pw.println();//换行输出
pw.printf();//格式化输出
pw.flush();//关闭输出流
}
}