java.util.NoSuchElementException: geen regel gevonden

Ik heb een runtime-uitzondering in mijn programma terwijl ik een bestand aan het lezen ben via een 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) 

Mijn code is:

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

Antwoord 1, autoriteit 100%

met Scannermoet je controleren of er een volgende regel is met hasNextLine()

zodat de lus wordt

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

het zijn lezers die null retourneren op EOF

in dit stukje code is dit natuurlijk afhankelijk van of de invoer correct is geformatteerd


Antwoord 2, autoriteit 34%

Je roept nextLine()aan en het genereert een uitzondering als er geen regel is, precies zoals de javadoc beschrijft. Het zal nooit null

teruggeven

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


Antwoord 3, autoriteit 23%

Ik heb ook met dat probleem te maken.
In mijn geval was het probleem dat ik de scanner in een van de functies had gesloten..

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

Antwoord 4, autoriteit 18%

Uw echte probleem is dat u “sc.nextLine()” MEER KEERaanroept dan het aantal regels.

Als u bijvoorbeeld slechts TIENinvoerregels heeft, kunt u ALLEEN“sc.nextLine()” TIENkeer aanroepen.

Elke keer dat u “sc.nextLine()” aanroept, wordt één invoerregel gebruikt. Als je “sc.nextLine()” MEER KEERaanroept dan het aantal regels, heb je een uitzondering genaamd

     "java.util.NoSuchElementException: No line found".

Als u “sc.nextLine()” nkeer moet aanroepen, dan moet u minstens nhebben lijnen.

Probeer uw code te wijzigen zodat het aantal keren dat u “sc.nextLine()” aanroept, overeenkomt met het aantal regels, en ik garandeer dat uw probleem zal worden opgelost.


Antwoord 5, autoriteit 16%

Om welke reden dan ook, de Scanner-klasse geeft dezelfde uitzondering ook als deze speciale tekens tegenkomt die ze niet kan lezen. Naast het gebruik van de methode hasNextLine()vóór elke aanroep van nextLine(), moet u ervoor zorgen dat de juiste codering wordt doorgegeven aan de Scanner-constructor, bijvoorbeeld:

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


Antwoord 6

Je moet topcommentaar gebruiken, maar let ook op nextLine(). Bel om deze fout te verhelpen alleen

sc.nextLine()

Eenmaal vanuit je while-lus

while (sc.hasNextLine()) {sc.nextLine()...}

U gebruikt terwijlom slechts 1regel vooruit te kijken. Gebruik vervolgens sc.nextLine()om 2regels te lezen voor de enkele regel die je in de while-lus hebt gevraagd om vooruit te kijken.

Verander ook de meerdere IF-instructies in IF, ELSEom te voorkomen dat ook meer dan één regel wordt gelezen.

Other episodes