java.util.NoSuchElementException: строка не найдена - PullRequest
30 голосов
/ 26 августа 2011

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

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

Ответы [ 5 ]

27 голосов
/ 26 августа 2011

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

так цикл становится

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

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

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

12 голосов
/ 26 августа 2011

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

http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html

4 голосов
/ 03 февраля 2016

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

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

2 голосов
/ 19 сентября 2017

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

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

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

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

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

0 голосов
/ 06 декабря 2018

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

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

		 

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

...