Question
Comment se fait-il que pour un objet scanner, le hasNextLine()
renvoie un résultat positif alors que la méthode hasNext()
renvoie un faux ?
Note : Sur la base du fichier d'entrée, le hasNext()
renvoie le résultat comme prévu ; la méthode hasNextLine()
ne semble pas renvoyer le bon résultat.
Code
Voici le code que j'exécute et qui donne les résultats ci-dessous :
public void ScannerTest(Reader fileReaderObject){
Scanner scannerObj = new Scanner(fileReaderObject);
for(int i = 1; scannerObj.hasNext(); i++){
System.out.println(i + ": " + scannerObj.next());
System.out.println("Has next line: " + scannerObj.hasNextLine());
System.out.println("Has next: " + scannerObj.hasNext());
}
System.out.println();
scannerObj.close();
}
Fichier d'entrée
Voici le contenu réel du fichier que je transmets à cet analyseur :
a 3 9
b 3 6
c 3 3
d 2 8
e 2 5
f 2 2
g 1 7
h 1 4
i 1 1
Résultat
Ce qui suit est la fin de ce qui est imprimé dans la console lorsque j'exécute mon code, et inclut la partie que je n'arrive pas à comprendre :
25: i
Has next line: true
Has next: true
26: 1
Has next line: true
Has next: true
27: 1
Has next line: true
Has next: false
24 votes
Y a-t-il par hasard une ligne vide à la fin de votre fichier d'entrée ?
15 votes
hasNextLine()
retourne vrai s'il y a une ligne suivante, même vide.hasNext()
retourne vrai s'il y a un jeton de plus. Une ligne vide est une ligne qui ne contient pas de jeton.1 votes
Je pense
next
ne consomme pas le\n
Le "curseur" se trouve donc juste avant le saut de ligne, il y a donc une ligne suivante, mais il n'y a plus de jeton.0 votes
Merci pour les réponses. Le fichier ne comprend pas de ligne vierge après "i 1 1", donc je m'attendrais à ce qu'une fois que le deuxième "1" de la dernière ligne est déplacé, il n'y a pas d'autre ligne ou de caractère de retour à prendre en compte. Il est intéressant de noter que si j'utilise la méthode nextLine() après la boucle, je n'obtiens pas d'erreur. Peut-être y a-t-il donc un caractère de retour qui traîne là ? Avez-vous une idée de la façon dont je peux aligner les résultats de la méthode hasNextLine() et de la méthode hasNext() ?