【问题标题】:Skipping Every N th line while reading from file从文件读取时跳过每 N 行
【发布时间】:2014-04-28 16:26:32
【问题描述】:

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

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 行(例如 4、8、12、..etc)。 这个方法我试过了,

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

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

【问题讨论】:

  • 哪一行抛出异常?!
  • 你试过调试你的程序吗?通常,异常会告诉您它被抛出到哪一行。你应该从那里开始。
  • linenum % 4 == 0 时,您增加了行号,但实际上并没有跳过任何行。您的if 分支需要从文件中读取一些内容并将其丢弃。
  • lineNum 应该被初始化为 1
  • st.nextToken() 正在抛出异常,我将修改代码以便清楚理解。

标签: java file


【解决方案1】:

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

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

    ++linenum;
}

【讨论】:

    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多