当前位置: 首页 > 知识库问答 >
问题:

NoSuchElementException in-Java

微生新霁
2023-03-14

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

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

这是我的代码:

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;
 }
}

这是留言。

    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)

共有3个答案

闾丘正志
2023-03-14

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

  • 您忘记为您的第二个Scanner s2检查hasNextLine()
    使用Scanner时,您需要检查是否有下一行带有hasNextLine(),它会在EOF返回null
  • 您可能希望在您的while循环中s.nextLine()而不是s.next(),因为您正在检查while(s1.hasNextLine())。通常,您必须将您的. hasNext...与您的. Next...匹配。
胡高寒
2023-03-14

如本答复所述。

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

hasNextLine()检查缓冲区中是否有其他线型hasNext()检查缓冲区中是否有一个可解析的令牌,由扫描仪的分隔符分隔。

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

while (s.hasNext()) {
    text = text + s.next() + " ";
}

while (s.hasNextLine()) {
    text = text + s.nextLine() + " ";
}
牟辰龙
2023-03-14

对于您在readString中遇到的特定异常

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

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

 类似资料:
  • 问题内容: 用最简单的方法,在java中如何创建一个文件并写入内容? 问题答案: 创建一个文本文件: 创建一个二进制文件: Java 7+用户可以使用Files该类来写入文件: 创建一个文本文件: 创建一个二进制文件:

  • 问题内容: 我正在尝试使用AJAX创建一个页面,但是当我获得该页面并且它包含Javascript代码时,它不会执行。 为什么? 我的ajax页面中的简单代码: …并且它不执行它。我正在尝试使用Google Maps API并通过AJAX添加标记,因此,每添加一个标记,我都会执行一个AJAX页面,该页面将获取新标记,并将其存储在数据库中,并应将标记“动态”添加到地图中。 但是,由于我无法以这种方式执

  • 问题内容: 我有一个基于jquery的单页webapp。它通过AJAX调用与RESTful Web服务进行通信。 我正在尝试完成以下任务: 将包含JSON数据的POST提交到REST URL。 如果请求指定JSON响应,则返回JSON。 如果请求指定PDF / XLS / etc响应,则返回可下载的二进制文件。 我现在有1&2,并且客户端jquery应用通过基于JSON数据创建DOM元素在网页上显

  • 问题内容: 我希望能够从Java操作方法中的JSON字符串访问属性。只需说一下即可使用该字符串。下面是该字符串的示例: 在此字符串中,每个JSON对象都包含其他JSON对象的数组。目的是提取ID列表,其中任何给定对象都具有包含其他JSON对象的group属性。我将Google的Gson视为潜在的JSON插件。谁能提供某种形式的指导,说明如何从此JSON字符串生成Java? 问题答案: 我将Goog

  • 问题内容: 在java中如何追加文本到存在的文件中? 问题答案: Java 7+ 如果你只需要执行一次,则使用Files类很容易: 注意:NoSuchFileException如果文件不存在,上述方法将抛出。它还不会自动追加换行符(追加到文本文件时通常会需要此换行符)。 但是,如果你要多次写入同一文件,则上述操作必须多次打开和关闭磁盘上的文件,这是一个缓慢的操作。在这种情况下,使用缓冲写入器更好:

  • 问题内容: Java-通过POST方法发送HTTP参数? 问题答案: 在GET请求中,参数作为URL的一部分发送。 在POST请求中,将参数作为请求的正文发送到标头之后。 要使用进行POST,你需要在打开连接后将参数写入连接。 这段代码可以帮助你入门:

  • 问题内容: 我很难找到最简单的方法来针对给定的JSON模式字符串验证JSON字符串(作为参考,这是在Java中运行在Android应用程序中)。 理想情况下,我只想传入JSON字符串和JSON模式字符串,并且它返回关于是否通过验证的布尔值。通过搜索,我发现了以下两个有前途的库可以完成此任务: http://jsontools.berlios.de/ https://github.com/fge/j

  • 问题内容: 如何在JavaScript中将字符串转换为整数? 问题答案: 最简单的方法是使用本机函数: 如果这对您不起作用,则有 parseInt , 一元加号 , 带有floor的parseFloat 和 Math.round 方法。 parseInt: 一元加号,如果您的字符串已经是整数形式: 如果您的字符串是浮点数或可能是浮点数,并且您想要一个整数: 或者,如果您要多次使用Math.floo