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 Scanner
moet 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.