Подтвердить что ты не робот

Java.util.NoSuchElementException: строки не найдено

У меня есть исключение времени выполнения в моей программе, пока я читаю файл через сканер.

java.util.NoSuchElementException: No line found     
   at java.util.Scanner.nextLine(Unknown Source)    
   at Day1.ReadFile.read(ReadFile.java:49)  
   at Day1.ParseTree.main(ParseTree.java:17) 

Мой код:

while((str=sc.nextLine())!=null){
    i=0;
    if(str.equals("Locations"))
    {
        size=4;
        t=3;
        str=sc.nextLine();
        str=sc.nextLine();
    }
    if(str.equals("Professions"))
    {
        size=3;
        t=2;
        str=sc.nextLine();
        str=sc.nextLine();
    }
    if(str.equals("Individuals"))
    {
        size=4;
        t=4;
        str=sc.nextLine();
        str=sc.nextLine();
    }

int j=0;
String loc[]=new String[size];
while(j<size){
    beg=0;
    end=str.indexOf(',');
    if(end!=-1){
        tmp=str.substring(beg, end);
        beg=end+2;
    }
    if(end==-1)
    {
        tmp=str.substring(beg);
    }
    if(beg<str.length())
        str=str.substring(beg);
    loc[i]=tmp;
    i++;

    if(i==size ){
        if(t==3)
        {
            location.add(loc);
        }
        if(t==2)
        {
            profession.add(loc);
        }
        if(t==4)
        {
            individual.add(loc);
        }
        i=0;
    }
    j++;
    System.out.print("\n");
}
4b9b3361

Ответ 1

со Scanner вам нужно проверить, есть ли следующая строка с hasNextLine()

поэтому петля становится

while(sc.hasNextLine()){
    str=sc.nextLine();
    //...
}

это читатели, которые возвращают null на EOF

Конечно, в этом фрагменте кода это зависит от того, правильно ли форматируется вход

Ответ 3

По какой-то причине класс Scanner также выдает это же исключение, если он встречает специальные символы, которые он не может прочитать. Помимо использования метода hasNextLine() перед каждым вызовом nextLine() убедитесь, что правильная кодировка передана конструктору Scanner, например:

Scanner scanner = new Scanner(new FileInputStream(filePath), "UTF-8");

Ответ 4

Ваша реальная проблема в том, что вы вызываете "sc.nextLine()" больше раз, чем количество строк.

Например, если у вас есть только 10 строк ввода, вы можете вызвать "sc.nextLine()" только 10 раз.

Каждый раз, когда вы вызываете "sc.nextLine()", будет использоваться одна входная строка. Если вы назовете "sc.nextLine()" больше времени, чем количество строк, вы получите исключение "java.util.NoSuchElementException: строка не найдена".

Если вам нужно называть "sc.nextLine()" n раз, то у вас должно быть не менее n строк.

Попытайтесь изменить свой код в соответствии с количеством раз, когда вы вызываете "sc.nextLine()" с количеством строк, и я гарантирую, что ваша проблема будет решена.

Ответ 5

Я также сталкиваюсь с этой проблемой. В моем случае проблема заключалась в том, что я закрыл сканер внутри одной из функций.

public class Main 
{
	public static void main(String[] args) 
	{
		Scanner menu = new Scanner(System.in);
        boolean exit = new Boolean(false);
    while(!exit){
		String choose = menu.nextLine();
        Part1 t=new Part1()
        t.start();
	    System.out.println("Noooooo Come back!!!"+choose);
		}
	menu.close();
	}
}

public class Part1 extends Thread 
{
public void run()
  { 
     Scanner s = new Scanner(System.in);
     String st = s.nextLine();
     System.out.print("bllaaaaaaa\n"+st);
     s.close();
	}
}