java java.util.scanner

java.util.NoSuchElementException: no se ha encontrado ninguna línea



java.util.scanner (4)

Por alguna razón, la clase Scanner también emite esta misma excepción si encuentra caracteres especiales que no puede leer. Más allá de usar el método hasNextLine() antes de cada llamada a nextLine() , asegúrese de que la codificación correcta se pase al constructor del Scanner , por ejemplo:

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

Obtuve una excepción de tiempo de ejecución en mi programa mientras estoy leyendo un archivo a través de un escáner.

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)

Mi código es:

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


Su verdadero problema es que llama "sc.nextLine ()" más veces que la cantidad de líneas.

Por ejemplo, si tiene solo 10 líneas de entrada, solo puede llamar "sc.nextLine ()" 10 veces.

Cada vez que llame a "sc.nextLine ()", se consumirá una línea de entrada. Si llama a "sc.nextLine ()" más veces que el número de líneas, tendrá una excepción llamada "java.util.NoSuchElementException: no se encontró ninguna línea".

Si tiene que llamar "sc.nextLine ()" n veces, entonces debe tener al menos n líneas.

Intenta cambiar tu código para que coincida con el número de veces que llamas "sc.nextLine ()" con el número de líneas, y te garantizo que tu problema se resolverá.


con Scanner debe verificar si hay una línea siguiente con hasNextLine()

por lo que el ciclo se vuelve

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

son lectores que devuelven nulo en EOF

por supuesto en este fragmento de código, esto depende de si la entrada está formateada correctamente