web-dev-qa-db-fra.com

java.util.NoSuchElementException: aucune ligne trouvée

J'ai eu une exception d'exécution dans mon programme pendant que je lisais un fichier avec un scanner. 

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) 

Mon code est:

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

avec Scanner vous devez vérifier s'il y a une prochaine ligne avec hasNextLine()

alors la boucle devient

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

ce sont les lecteurs qui retournent null sur EOF

bien sûr, dans ce morceau de code, cela dépend si l'entrée est correctement formatée

26
ratchet freak

Vous appelez nextLine() et génère une exception lorsqu'il n'y a pas de ligne, exactement comme le décrit le javadoc. Il ne retournera jamais null

http://download.Oracle.com/javase/1,5.0/docs/api/Java/util/Scanner.html

12
Brian Roach

Votre vrai problème est que vous appelez "sc.nextLine ()" plus de fois que le nombre de lignes. 

Par exemple, si vous ne disposez que de 10 lignes d’entrée, vous ne pouvez appeler "sc.nextLine ()" que 10 fois.

Chaque fois que vous appelez "sc.nextLine ()", une ligne d’entrée sera utilisée. Si vous appelez "sc.nextLine ()" plus de fois que le nombre de lignes, vous aurez une exception appelée "Java.util.NoSuchElementException: Aucune ligne trouvée".

Si vous devez appeler "sc.nextLine ()" n fois, vous devez avoir au moins n lignes. 

Essayez de changer votre code pour faire correspondre le nombre de fois que vous appelez "sc.nextLine ()" avec le nombre de lignes et je vous garantis que votre problème sera résolu.

2
William Hou

Je rencontre aussi avec ce problème. Dans mon cas, le problème était que j’avais fermé le scanner à l’intérieur de l’un des fonctions ..

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

		 

Le code ci-dessus faisait la même chose, la solution consistait à fermer le scanner une seule fois au niveau principal.

0
agr