我的程序使用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);
}
这是文本文件
name eng phys chem comp
name1 5 4 3 2 1
lolk 5 2 1 4 100
答案 0 :(得分:1)
<强> 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);
}