Programmation Java: lecture d'une ligne à la fois

Dans cette liste de code Java, le payOneEmployee méthode illustre quelques astuces utiles pour la lecture des données. En particulier, tous les scanners que vous créez a un nextLine Procédé. (Vous ne pourriez pas utiliser ce nextLine Procédé, mais le procédé est néanmoins disponible).

Lorsque vous appelez un scanner de nextLine Procédé, le procédé prend tout jusqu'à la fin de la ligne de texte. Dans cette annonce, un appel à nextLine peut lire une ligne entière de la EmployeeInfo.txt fichier. (Dans un autre programme, un scanner de nextLine appel peut lire tout les types d'utilisateurs sur le clavier jusqu'à l'appui sur la touche Entrée.)

import-import java.io.File java.util.Scanner-import java.io.IOException-classe publique DoPayroll {static void main (String args []) throws IOException {publics Scanner diskScanner = new Scanner (new File ("EmployeeInfo. txt ")) - for (int empnum = 1- empnum lt; = 3- empnum ++) {payOneEmployee (diskScanner) -} diskScanner.close () -} static void payOneEmployee (Scanner aScanner) {Employé anEmployee = new Employee()-anEmployee.setName(aScanner.nextLine())-anEmployee.setJobTitle(aScanner.nextLine())-anEmployee.cutCheck(aScanner.nextDouble())-aScanner.nextLine()-}}

Remarquez le choix judicieux des mots: nextLine lit tout jusqu'à la fin de la ligne courante. Malheureusement, ce que cela signifie pour lire jusqu'à la fin de la ligne actuelle est pas toujours ce que vous pensez que cela signifie. Entremêlant nextInt, nextDouble, et nextLine les appels peuvent être salissant. Vous devez regarder ce que vous faites et vérifier la sortie de votre programme soigneusement.

Pour comprendre tout cela, vous devez être douloureusement conscients des sauts de ligne d'un fichier de données. Pensez à un saut de ligne comme un caractère supplémentaire, coincé entre une ligne de texte et la suivante. Alors imaginez ce que l'appel nextLine les moyens de tout jusqu'à et y compris la prochaine coupure de ligne lire.




Maintenant, jetez un oeil à ce chiffre.

image0.jpg
  • Si un appel à nextLine lit Barry Burd [LineBreak], l'appel à la suite de nextLine lit PDG [LineBreak].

  • Si un appel à nextDouble lit le numéro 5000.00, à la suite de l'appel nextLine lit le [Saut de ligne] qui vient immédiatement après le numéro 5000.00. (Voilà toute la nextLine lit - un [Saut de ligne] et rien de plus.)

  • Si un appel à nextLine lit le [Saut de ligne] après le numéro 5000.00, à la suite de l'appel nextLine lit Harriet Ritter [LineBreak].

Donc, après avoir lu le numéro 5000.00, vous avez besoin deux les appels à nextLine dans le but de ramasser le nom Harriet Ritter. L'erreur que vous faites habituellement est d'oublier le premier de ces deux appels.

Regardez à nouveau le fichier dans la figure. Pour le code de cette section fonctionne correctement, vous devez avoir un saut de ligne après la dernière 10000.00. Si vous ne le faites pas, un dernier appel à nextLine rend votre programme Crash and Burn. Le message d'erreur lit NoSuchElementException: Aucune ligne trouvée.

Vous pourriez être surpris par le nombre de bizarreries que vous trouverez dans les méthodes d'analyse de chaque langage de programmation. Par exemple, le premier nextLine qui lit à partir du fichier dans les dévore figure Barry Burd [LineBreak] à partir du fichier.

Mais ceci nextLine appel offre Barry Burd (sans saut de ligne) pour le code en cours d'exécution. Ainsi nextLine cherche un saut de ligne, puis nextLine perd le saut de ligne. Oui, cela est un point subtil. Et non, ce point subtile rarement provoque des problèmes pour quiconque.

Si cette histoire nextDouble et nextLine vous confond, s'il vous plaît ne pas mettre le blâme sur Java. Mélange appels d'entrée est un travail délicat dans un langage de programmation informatique. Et la chose vraiment méchant est que chaque langage de programmation aborde le problème un peu différemment.

Qu'est-ce que vous découvert nextLine en Java vous aide à comprendre les questions quand vous arrivez à savoir C ++ ou Visual Basic, mais il ne vous dit pas tous les détails. Les détails de chaque langue sont propres à cette langue.


» » » » Programmation Java: lecture d'une ligne à la fois