NoSuchElementException in - Java
我试图从文本文件中读取数据,然后将其存储到数组中。 我假设每行有一个单词。 我在这里得到
1 2 3 4 | while (s.hasNextLine()) { text = text + s.next() +""; } |
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | public class ReadNote { public static void main(String[]args) { String text = readString("CountryList.txt"); System.out.println(text); String[] words = readArray("CountryList.txt"); for (int i = 0; i < words.length; i++) { System.out.println(words[i]); } } public static String readString(String file) { String text =""; try{ Scanner s = new Scanner(new File(file)); while (s.hasNextLine()) { text = text + s.next() +""; } } catch(FileNotFoundException e) { System.out.println("file not found"); } return text; } public static String[] readArray(String file) { int ctr = 0; try { Scanner s1 = new Scanner(new File(file)); while (s1.hasNextLine()) { ctr = ctr+1; s1.next(); } String[] words = new String[ctr]; Scanner s2 = new Scanner(new File(file)); for ( int i = 0; i < ctr; i++) { words [i] = s2.next(); } return words; } catch (FileNotFoundException e) { } return null; } } |
这是消息。
1 2 3 4 5 | Exception in thread"main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1371) at ReadNote.readString(ReadNote.java:29) at ReadNote.main(ReadNote.java:13) |
如本答案所述。
在文件末尾有一个额外的换行符。
您应该将代码修改为以下之一
1 2 3 4 5 6 7 | while (s.hasNext()) { text = text + s.next() +""; } while (s.hasNextLine()) { text = text + s.nextLine() +""; } |
对于
1 2 3 | while (s.hasNextLine()) { text = text + s.next() +""; } |
您需要在循环保护中调用
据我所知,您的代码有两个问题:
-
你忘了检查第二个
Scanner s2 的hasNextLine() 。
使用Scanner 时,您需要检查下一行是否有hasNextLine() ,它将在EOF 处返回null 。 -
因为您正在检查
while (s1.hasNextLine()) ,所以在while 循环中可能需要s.nextLine() 而不是s.next() 。 通常,您必须将.hasNext... 与.next... 匹配。