【发布时间】: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()正在抛出异常,我将修改代码以便清楚理解。