現小結如下:
1、類java.io.StreamTokenizer可以獲取輸入流並將其分析爲Token(標記)。
StreamTokenizer的nextToken方法讀取下一個標記
2、默認情況下,StreamTokenizer認爲下列內容是Token:字母、數字、除c和c++註釋符號以外的其他符號。
如符號“/”不是Token,註釋後的內容也不是,而"/"是Token。單引號和雙引號以及其總的內容,只能算一個Token。
3、字段摘要
4、 構造方法:
public StreamTokenizer(Reader r)
爲了提高效率,使用BufferedReader,如下,創建StreamTokenizer對象
StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
5、爲了從流中獲取標記,可以調用StreamTokenizer的nextToken()方法。
調用nextToken()方法以後,如果標記是字符串,可用 String s=st.sval,如果是整數用 int n=(int) st.nval得到。
例:poj1823的輸入(見http://128kj.iteye.com/blog/1739733
- public static void main(String[] args) throws IOException{
- //注:用Scanner in=new Scanner(System.in)超時!!!!!!!!
- StreamTokenizer st = new StreamTokenizer(new BufferedReader(
- new InputStreamReader(System.in)));
- PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
- // while(st.nextToken() != StreamTokenizer.TT_EOF)
- st.nextToken();
- int n= (int) st.nval;
- st.nextToken();
- int p=(int) st.nval;
- Main ma=new Main();
- int sign;
- int ll,rr;
- ma.build(1,1,n);
- for(int i=0;i<p;i++){
- st.nextToken();
- sign=(int) st.nval;
- if(sign==3){
- out.printf("%d\n",ma.getMax());
- }else{
- st.nextToken();
- ll=(int) st.nval;
- st.nextToken();
- rr=(int) st.nval;
- rr=ll+rr-1;
- if(sign==2)
- sign=0;
- ma.update(1,ll,rr,sign);
- }
- }
- out.flush();
- }
- }
- 另一個示例:
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.StreamTokenizer;
- public class Test2 {
- 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();
- }
- }
- }