java - 从文件读取时跳过每 N 行

标签 java file

我正在尝试读取包含表单数据的文件,

0 160 76 160
0 320 11 320
0 960 470 960
960
0 12 6 12
0 24 7 24
0 1500 302 1500
3000
0 70 33 70
0 140 60 140
0 784 74 784
3920

我想跳过包含单个值的每第四行(例如4、8、12、..等)。 我试过这个方法,

Scanner scan = new Scanner(new FileInputStream("demofile.txt"));
int linenum = 0;
while(scan.hasNextLine()){
  if(linenum != 0 && linenum % 4 == 0){
     linenum++;
     continue;
  }
  else{
     String str = scan.nextLine();
     StringTokenizer st = new StringTokenizer(str, " ");
     //Extract four tokens from single line
     String a = st.nextToken();
     String b = st.nextToken(); // This line throws java.util.NoSuchElementException
     //and so on..
     //other stuff
     ...
     linenum++;
  }
}

但是它不起作用,我收到以下错误跟踪:

Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:332)
at ReadDemo.main(ReadDemo.java:48) //line 48  is second `st.nextToken()` in above code

表明我正在阅读文件末尾, 上面的逻辑有什么问题吗? 请帮忙。谢谢。

最佳答案

从 1 开始 linenum,你的程序就会运行。 此外,linenum 的递增实现得也很差。 尝试这样的事情:

linenum = 1;
while (scan.hasNextLine())
{
    String line = scan.nextLine();
    if ((linenum % 4) > 0)
    {
        StringTokenizer stringTokenizer = new StringTokenizer(line, " ");
        ... blah
    }

    ++linenum;
}

关于java - 从文件读取时跳过每 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23346340/

相关文章:

使用扫描仪的java数组

mysql - 我的 mysql "my.conf"应该是什么样子?

Java Swing, JComboBox 下拉列表点击前改变监听器

java - CellList 保持选定的单元格被选中?

Java OpenFaces CSS

java - 如何使用 jre 1.5 使文件可执行?

c# - 编辑 M4V 视频元数据

node.js - 从 GraphQL resolve 返回文件

c - fprintf(long) 写入 8 个字节,而 fscanf(long) 读取 6 个字节,为什么?

java - 随机游走 10x10 网格阵列