java.util.NoSuchElementException:找不到行

当我通过扫描仪读取文件时,程序中出现运行时exception。

java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Unknown Source) at Day1.ReadFile.read(ReadFile.java:49) at Day1.ParseTree.main(ParseTree.java:17) 

我的代码是:

 while((str=sc.nextLine())!=null){ i=0; if(str.equals("Locations")) { size=4; t=3; str=sc.nextLine(); str=sc.nextLine(); } if(str.equals("Professions")) { size=3; t=2; str=sc.nextLine(); str=sc.nextLine(); } if(str.equals("Individuals")) { size=4; t=4; str=sc.nextLine(); str=sc.nextLine(); } int j=0; String loc[]=new String[size]; while(j<size){ beg=0; end=str.indexOf(','); if(end!=-1){ tmp=str.substring(beg, end); beg=end+2; } if(end==-1) { tmp=str.substring(beg); } if(beg<str.length()) str=str.substring(beg); loc[i]=tmp; i++; if(i==size ){ if(t==3) { location.add(loc); } if(t==2) { profession.add(loc); } if(t==4) { individual.add(loc); } i=0; } j++; System.out.print("\n"); } 

Scanner你需要检查是否有hasNextLine()的下一行

所以循环成为

 while(sc.hasNextLine()){ str=sc.nextline(); //... } 

它是EOF上返回null的读者

在这段代码中,这取决于input的格式是否正确

你正在调用nextLine()并且在没有行的时候抛出exception,就像javadoc描述的一样。 它永远不会返回null

http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html

无论出于何种原因,如果Scanner类遇到不能读取的特殊字符,它也会发出相同的exception。 在每次调用hasNextLine()之前,除了使用hasNextLine()方法之外,还要确保将正确的编码传递给Scanner构造函数,例如:

Scanner scanner = new Scanner(new FileInputStream(filePath), "UTF-8");

你真正的问题是,你调用“sc.nextLine()”的次数超过NUMBER行。

你必须知道,如果你只有10条input线 ,那么你只能调用“sc.nextLine()” 10次

每次调用“sc.nextLine()”时,都会消耗一条input行。 如果调用“sc.nextLine()”的次数超过行数,将会出现一个名为“java.util.NoSuchElementException:No line found”的exception。

如果你必须调用“sc.nextLine()”“ N ”次,那么你必须至less有“ N ”行。

尝试改变你的代码来匹配你调用“sc.nextLine()”的次数与行 ,我保证你的问题将被解决。