Вопрос-ответ

java.util.NoSuchElementException: No line found

Исключение 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");
}
Переведено автоматически
Ответ 1

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

таким образом, цикл становится

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

это программы чтения, которые возвращают null при EOF

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

Ответ 2

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

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

Приведенный выше код сделал то же исключение, решение состояло в том, чтобы закрыть сканер только один раз на главном.

Ответ 3

Вы вызываете nextLine() и он выдает исключение, когда нет строки, точно так, как описано в javadoc. Оно никогда не вернется null

https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html

Ответ 4

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

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

java