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
nextLine()
a nextLine()
y lanza una excepción cuando no hay línea, exactamente como lo describe javadoc. Nunca regresará null
http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html