调用.next()方法时扫描程序NoSuchElementException

在Java中,我得到了这个例外:

Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at com.reading.text.Activity3.readFile(Activity3.java:22) at com.reading.text.Activity3.main(Activity3.java:10) 

从这个Java代码:

 public static void main(String args[]) { readFile("C:/Users/forsakendoll/Desktop/boom.txt"); } public static void readFile(String path) { Scanner file = null; try { file = new Scanner(new File (path)); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { while (file.hasNext()) { for(int counter = 0 ; counter < file.next().length(); counter ++) { System.out.println(file.next().charAt(counter)); } } } } 

抛出exception

的System.out.println(file.next()的charAt(计数器)。);

什么是例外意味着什么?

你在循环的每次迭代中调用.next()两次,所以当你接近结束时,你跳出列表的末尾,编译器告诉你那里什么也没有。

而不是这个:

 for(int counter = 0 ; counter < file.next().length(); counter ++) { System.out.println(`file.next()`.charAt(counter)); } 

改为:

 String temp = file.next(); for(int counter = 0 ; counter < next.length(); counter ++) { System.out.println(temp .charAt(counter)); } 

看这里

不要拨打下一个()这么多次! 当你调用它时,它实际上转到下一个元素。 如果您需要多次使用它,请将其放入变量并使用它。

  String next = file.next(); for(int counter = 0 ; counter < next.length(); counter ++) { System.out.println(next.charAt(counter)); } 

Scanner.next()方法将沿一个方向移动内部迭代器。 你的代码应该是:

 public static void readFile(String path) { Scanner file = null; try { file = new Scanner(new File (path)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { while (file.hasNext()) { String next = file.next(); for(int counter = 0 ; counter < next.length(); counter ++) { System.out.println(next.charAt(counter)); } } } }