使用.equals、arraylist和扫描仪读取文件时的java.util.NoSuchElementException

使用.equals、arraylist和扫描仪读取文件时的java.util.NoSuchElementException,java,file,arraylist,java.util.scanner,nosuchelementexception,Java,File,Arraylist,Java.util.scanner,Nosuchelementexception,我试图用一个包含空格的文本文件填充字符串的arraylist,这样arraylist中的每个字符串都将在第一个和第二个数字之间包含空格,并且没有前导或尾随空格。很遗憾,我在运行时遇到了以下错误序列: Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at

我试图用一个包含空格的文本文件填充字符串的arraylist,这样arraylist中的每个字符串都将在第一个和第二个数字之间包含空格,并且没有前导或尾随空格。很遗憾,我在运行时遇到了以下错误序列:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at scannerTest.main(scannerTest.java:26)
以下是我的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class scannerTest 

{

private static ArrayList<String> myStore = new ArrayList<String>();

public static void main(String[] args) 
{
    int id = 0;
    int inv = 0;
    boolean idStarted = false;
    boolean idFinished = false;
    try 
    {
        Scanner file = new Scanner(new File("file50.txt"));
        System.out.println("File:   " + "file50.txt");
        while (file.hasNextLine())
        {
            for (int b = 0; b < (file.nextLine()).length(); b++)
            {
                if (!file.next().equals(" "))
                {
                    id = id + Integer.parseInt(file.next());
                    idStarted = true;
                }
                if (idStarted = true && file.next().equals(" "))
                {
                    idFinished = true; 
                }
                if (idFinished = true && !file.next().equals(" "))
                    inv = inv + Integer.parseInt(file.next());
            }
            String result = Integer.toString(id) + " " + Integer.toString(inv);
            myStore.add(result);
        }
    }       
    catch (FileNotFoundException e)
    {
        System.out.println("ERROR:  File '" + "file50.txt" + "' not found!");
    }
    System.out.println(myStore);
}
我看不出第26行为什么会出现这种错误:

if (!file.next().equals(" "))

我要做的是检查一行中的下一个对象是否是空白,如果是,则忽略它。在这件事上的任何帮助都将不胜感激

如果要重用
file.next()
的值,则需要将其存储在变量中

调用next将增加它所指向的位置

试一试


您可以修剪得到的输入并将其分配给字符串。然后,因为每行只有两个索引,所以可以使用空格分隔符将其拆分到一个数组中,并将它们与空格一起附加

public static void main(String[] args)
{
    try
    {
        Scanner file = new Scanner(new File("test1/file50.txt"));
        System.out.println("File:   " + "file50.txt");
        while (file.hasNextLine())
        {
           String test = file.nextLine().trim();
           String[] array = test.split("\\s+");

            myStore.add(array[0]+" "+array[1]);
        }

    }
    catch (FileNotFoundException e)
    {
        System.out.println("ERROR:  File '" + "file50.txt" + "' not found!");
    }

    for(int i=0;i<myStore.size();i++){
        System.out.println(myStore.get(i));
    }

}
publicstaticvoidmain(字符串[]args)
{
尝试
{
扫描仪文件=新扫描仪(新文件(“test1/file50.txt”);
System.out.println(“文件:“+”file50.txt”);
while(file.hasNextLine())
{
字符串测试=file.nextLine().trim();
字符串[]数组=test.split(\\s+);
添加(数组[0]+“”+array[1]);
}
}
catch(filenotfounde异常)
{
System.out.println(“错误:文件“+”file50.txt“+”未找到!”);
}

对于(int i=0;i每次调用从扫描仪上读取的以
next
开头的方法时。在至少两种情况下,如果你立即跳出去看你的代码,你就是在扔掉你读到的东西。我看到了你在说什么,我实现了它,但我仍然得到相同的错误。你使用nextLine也是一样的正在初始化以导致此问题。请使用getLine获取字符串,然后分析此字符串。不需要再使用扫描仪。
String val = file.next ();

if (val.equals (" ")
   .

   .

 if (idStarted = true && val.equals(" ")) 
public static void main(String[] args)
{
    try
    {
        Scanner file = new Scanner(new File("test1/file50.txt"));
        System.out.println("File:   " + "file50.txt");
        while (file.hasNextLine())
        {
           String test = file.nextLine().trim();
           String[] array = test.split("\\s+");

            myStore.add(array[0]+" "+array[1]);
        }

    }
    catch (FileNotFoundException e)
    {
        System.out.println("ERROR:  File '" + "file50.txt" + "' not found!");
    }

    for(int i=0;i<myStore.size();i++){
        System.out.println(myStore.get(i));
    }

}