行尾不读 - 流令牌化Java

时间:2015-07-01 04:20:39

标签: java stream

我的程序使用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

1 个答案:

答案 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); 
                }
相关问题