2011-08-26 20 views
23

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 se encontró ninguna línea

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

intente eliminar todos los espacios en su código ... estirar un poco los ojos. Además, "ingresa tu código aquí", me parece una tarea lol –

+2

Bienvenido a SO. Al publicar el código, debe tener cuidado de formatearlo para su legibilidad ... es decir, eliminar las líneas en blanco innecesarias, sangrar correctamente. También formatee su stacktrace como código para hacerlo legible. He arreglado el formato para ti. –

+2

Además, omitió la pieza más importante, que es cómo 'sc' fue declarado y abierto. –

Respuesta

20

con Scanner es necesario comprobar si hay una próxima línea con hasNextLine()

por lo que el bucle se convierte en

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

es lectores que devuelven nulo en EOF

por supuesto en t su parte del código depende de si la entrada está formateada correctamente

2

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

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

1

Su verdadero problema es que usted está llamando "sc.nextLine()" más veces que NUMBER de líneas.

usted tiene que saber, si usted tiene sólo 10 líneas de entrada, a continuación, sólo se 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 usted tiene que llamar "sc.nextLine()" N "" veces, entonces usted tiene que tener por lo menos "N" líneas.

tratar de cambiar su código para que coincida con el número de veces que se llama "sc.nextLine()" con el número de líneas, y yo GARANTIZA que su problema será resuelto.

Cuestiones relacionadas