Le problème avec les suggestions d'utiliser scanner.nextLine()
est qu'il retourne en fait la ligne suivante en tant que String
. Cela signifie que tout texte qui y est est consommé. Si vous êtes intéressé par l'analyse du contenu de cette ligne ... eh bien, tant pis! Vous devrez analyser le contenu du String
retourné par vous-même.
Une meilleure façon serait d'utiliser
while (scanner.findInLine("(?=\\S)") != null) {
// Process the line here…
…
// After processing this line, advance to the next line (unless at EOF)
if (scanner.hasNextLine()) {
scanner.nextLine();
} else {
break;
}
}
Depuis (?=\S)
est une assertion avant zéro largeur, il ne sera jamais consommer toute entrée. S'il trouve un texte non-blanc dans la ligne courante, il exécutera le corps de la boucle.
Vous pouvez omettre le else break;
si vous êtes certain que le corps de la boucle aura déjà consommé tout le texte non-espace dans cette ligne.
Cela a un effet secondaire sur l'obtention de la ligne (par exemple, je dois diviser la ligne par des espaces, par exemple si je veux analyser des valeurs séparées par des espaces). Y at-il une méthode de type 'hasNextLine()' où le "pointeur" ne va pas à la ligne suivante? –
Err, je ne comprends pas ce qui ne va pas avec la séparation de la ligne ... –
@jiewmeng - quand vous appelez 'scanner.hasNext()' vous devrez toujours aller chercher la ligne pour vérifier si elle est vide et la traiter. Pourriez-vous expliquer pourquoi la réponse de Bart ne fonctionnerait pas pour vous? – luketorjussen