我的程序使用Stream Tokenizer从文件中读取并打印内容。检查是否已到达文件末尾的if条件不起作用。
public static void main(String[] args)throws Exception {
FileReader fr = new FileReader("sample.txt");
StreamTokenizer st = new StreamTokenizer(fr);
System.out.printf("%26s","Student Marksheet");
System.out.println();
do{
tokenType=st.nextToken();
if(tokenType==StreamTokenizer.TT_WORD) System.out.print(st.sval+" ");
if(tokenType==StreamTokenizer.TT_NUMBER) System.out.print(st.nval+" ");
if(tokenType==StreamTokenizer.TT_EOL) System.out.println(); //this line is the problem
} while(tokenType!=StreamTokenizer.TT_EOF);
}
这是的文本文件
名称eng物理化学成分
名称1 5 4 3 2 1
lolk 5 2 1 4 100
TT_EOL
public final static int TT_EOL = 'n'
说明
此标记类型表示已到达行的末尾。除非调用了eolIsSignificant(true),否则nextToken()不会返回该值。
eolIsSignificant(false)
是默认状态。所以,让它成为现实,并运行它将工作的代码。当为假时,下一个令牌将不返回TT_EOL。
使用以下代码进行检查。
FileReader fr = new FileReader("input.txt");
StreamTokenizer st = new StreamTokenizer(fr);
st.eolIsSignificant(true);//add this line
System.out.printf("%26s","Student Marksheet");
System.out.println();
int tokenType=0;
do{
tokenType=st.nextToken();
if(tokenType==StreamTokenizer.TT_WORD) System.out.print(st.sval+" ");
if(tokenType==StreamTokenizer.TT_NUMBER) System.out.print(st.nval+" ");
if(tokenType==StreamTokenizer.TT_EOL) System.out.println(""); //this line is the problem
} while(tokenType!=StreamTokenizer.TT_EOF);
}