在http://poj.org/上用JAVA解题一般用Scanner类来进行输入,但对时间要求严格的题,用它可能会超时,我解POJ1823的时候就遇到这样的问题,后改用StreamTokenizer类进行输入,就过了。看来后者处理输入的效率要高点。
现小结如下:
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();
}
}
}
- 大小: 7.9 KB
分享到:
相关推荐
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
Poj中一些题目的源代码,里面共有二十多道题目,OI
poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...
我在poj共做了175题,暂时传上来看看
02.北大POJ题库使用指南.docx02.北大POJ题库使用指南.docx02.北大POJ题库使用指南.docx02.北大POJ题库使用指南.docx02.北大POJ题库使用指南.docx02.北大POJ题库使用指南.docx02.北大POJ题库使用指南.docx02.北大POJ...
1、类java.io.StreamTokenizer可以获取输入流并将其分析为Token(标记)。 StreamTokenizer的nextToken方法读取下一个标记 2、默认情况下,StreamTokenizer认为下列内容是Token:字母、数字、除c和c++注释...
POJ第1861题源码 POJ第1861题源码 POJ第1861题源码
poj训练 c语言poj训练 西工大 poj 100题。
北大POJ2002-Squares 解题报告+AC代码
北大POJ1159-Palindrome 解题报告+AC代码
poj分类poj分类poj分类poj分类
POJ上的一道题目,自己写的代码,因为想下载别人的, 所以就放上了。
C语言 poj npu 西工大 C语言Poj答案全完整打包,给有需要的朋友
poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告
poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告
poj 2329解题报告poj 2329解题报告poj 2329解题报告poj 2329解题报告
poj 1659解题报告poj 1659解题报告poj 1659解题报告poj 1659解题报告
POJ1503解答 POJ1503解答,正确答案(已通过POJ)
POJ1048,加强版的约瑟夫问题 难度中等
POJ1083的代码,POJ1083的代码,POJ1083的代码