调用.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)); } } } }