今天在刷PAT1032题的时候抱着学习的心态去百度了一下别人的代码和自己的代码比较去其糟糠,取其精华。还真发现了一些东西,思路都是一样的所以我能保证自己的答案肯定也是可以AC的,但是第四个测试用例一直都是超时,对于使用Java答题的我早已习惯Time Out了,但是别人的没有Time Out全都AC这才引起我的注意,于是才有了这篇博客。
java.util.Scanner与java.io.StreamToken
Scanner通过正则表达式去解析一个一个“字节数据”,才会有他的 next()、nextInt()、nextBigDecimal()等方法,但是正则表达式的效率不高因此答题很容易Time Out。
StreamToken是通过分析“字符流”将字符拆分为一个个Token,StreamToken底层会去区分Token类型:word、number,与Scanner比较是不是省了很多。因此StreamToken比Scanner快很多。
大佬介绍StreamToken
// 大佬的示例代码:
StreamTokenizer streamTokenizer = new StreamTokenizer(
new StringReader("Mary had 1 little lamb..."));
while(streamTokenizer.nextToken() != StreamTokenizer.TT_EOF){
if(streamTokenizer.ttype == StreamTokenizer.TT_WORD) {
System.out.println(streamTokenizer.sval);
}