2017-06-11 4 views
-5

Je suis nouveau sur JAVA et j'essaie de lire les données d'un fichier .txt. J'ai implémenté un objet Scanner 'dans' Scanner in=new Scanner("file.txt");, puis dans le code une boucle while pour parcourir le contenu du fichier. Il y a plusieurs lignes de données dans le fichier et dans chaque ligne il y a trois chaînes (numéro de sécurité, First nom, nom: 01 Thomas Anderson)Que fait hasNext() dans un while?

while(in.hasNext()){ 
    String ss = in.next(); 
    String FName=in.next(); 
    String LName=in.next(); 

    System.out.printf("SSN: %s, FirstName: %s, LastName: %s \n",ss,FName,LName); 
    } 

Alors, que fait la méthode hasNext()? Cherche-t-il la fin de la rangée ou la dernière rangée du fichier ou ...?

S'IL VOUS PLAÎT détails sur le fonctionnement de l'extrait ci-dessus (en mentionnant la méthode suivante aussi())

:)

+2

Avez-vous lu la documentation de la méthode 'Scanner.hasNext()' dans l'API Javadoc? Parce que si vous ne le faites pas et que votre première réaction à une méthode est de demander ce que cela signifie, vous allez avoir besoin de beaucoup de questions ... Si vous avez, soyez plus précis sur ce que vous ne comprenez pas. – SJuan76

+0

Avez-vous regardé le javadoc? Y avait-il des parties ce que nous ne savons pas –

Répondre

0

Je recommande regarder le Javadoc, mais je vais vous expliquer pour vous aussi simple comme je peux.

Fondamentalement, la méthode hasNext() renvoie true si le document indiqué contient une autre chaîne. Par conséquent, pourquoi l'extrait sera-t-il bouclé si ledit document a une autre chaîne. Une fois qu'il n'y a plus de chaînes dans le document entier, hasNext() renvoie false.

Voici un exemple de la méthode suivante(): String myString = myScanner.next(); Cela rend myString égale à la chaîne suivante dans le document donné.

0

Javadoc dit:

hasNext
hasNext public boolean()

Renvoie true si ce scanner a un autre jeton dans son entrée. Cette méthode peut bloquer en attendant que l'entrée soit analysée. Le scanner ne dépasse pas .

suivant
suivante (chaîne)

publique Finds, et renvoie le jeton complet de ce scanner. Un jeton complet est précédé et suivi d'une entrée correspondant au modèle de délimiteur . Cette méthode peut bloquer en attendant l'entrée de l'analyse , même si une invocation précédente de hasNext() a renvoyé true.

Pour lire toutes vos lignes de fichiers, vous devez vérifier s'il y a des jetons à chaque ligne. Ensuite, vous appelez 3 fois la méthode suivante puisque vous savez qu'il y aura 3 jetons par ligne:

import java.io.File; 
import java.util.Scanner; 

public class FLoader { 

    public void load(String path) { 
     Scanner in = null; 

     try { 
      in = new Scanner(new File(path)); 
      while (in.hasNext()) { 
       String ss = in.next(); 
       String FName = in.next(); 
       String LName = in.next(); 

       System.out.printf("SSN: %s, FirstName: %s, LastName: %s \n", ss, FName, LName); 
      } 

     } catch (Exception e) { 
      System.err.println("Loading file failed"); 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
}