关于combobox:NoSuchElementException in – Java

NoSuchElementException in - Java

我试图从文本文件中读取数据,然后将其存储到数组中。 我假设每行有一个单词。 我在这里得到NoSuchElementException

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)


如本答案所述。

在文件末尾有一个额外的换行符。

hasNextLine()检查缓冲区中是否还有另一个linePattern。
hasNext()检查缓冲区中是否存在可解析的令牌,由扫描器的分隔符分隔。

您应该将代码修改为以下之一

1
2
3
4
5
6
7
while (s.hasNext()) {
    text = text + s.next() +"";
}

while (s.hasNextLine()) {
    text = text + s.nextLine() +"";
}

对于readString中的特定异常:

1
2
3
while (s.hasNextLine()) {
  text = text + s.next() +"";
}

您需要在循环保护中调用s.hasNext(),或在正文中使用s.nextLine()


据我所知,您的代码有两个问题:

  • 你忘了检查第二个Scanner s2hasNextLine()
    使用Scanner时,您需要检查下一行是否有hasNextLine(),它将在EOF处返回null
  • 因为您正在检查while (s1.hasNextLine()),所以在while循环中可能需要s.nextLine()而不是s.next()。 通常,您必须将.hasNext....next...匹配。