Scanner sur fichier texte hasNext() est infini
Je suis en train d'écrire un programme simple en Java et il nécessite la lecture des données à partir d'un fichier texte. Cependant, je rencontre des problèmes de comptage de lignes. Le problème semble assez générique pour une simple recherche sur Google mais je ne peut pas encore être à la recherche de bonnes choses.
Le livre que je suis en train d'apprendre à partir suggère que de compter le nombre de lignes dans un fichier texte, vous devez faire quelque chose comme ceci:
public static int[] sampleDataArray(String inputFile) throws IOException
{
File file = new File(inputFile);
Scanner inFile = new Scanner(file);
int count = 0;
while (inFile.hasNext())
count++;
int[] numbersArray = new int[count];
inFile.reset();
for (int i = 0; i < count; i++)
{
numbersArray[i] = inFile.nextInt();
}
inFile.close();
return numbersArray;
}
Il me semble que la while (inFile.hasNext())
ligne est le problème. Je pense que le hasNext()
est en cours d'exécution à l'infini. Le fichier de données que je suis en utilisant le code a certainement un nombre limité de lignes de données.
Que dois-je faire?
int[]
par List<Integer>
. De cette façon, vous n'avez pas besoin de connaître la taille à l'avance et il vous permet d'économiser de l'un plus de boucle.OriginalL'auteur AvaMango | 2011-12-02
Vous devez vous connecter pour publier un commentaire.
Après l'appel de
hasNext()
la première fois, si vous n'avez pas lu à partir du fichierhasNext()
retourne toujours true. Parce que l'avant de l'entrée ne change pas.Imaginez que vous avez un fichier avec cette ligne:
Si vous appelez
hasNext()
sur ce fichier, il sera de retourtrue
car il y a une prochaine jeton dans le fichier, dans ce cas, le motthis
.Si vous n'avez pas lu à partir du fichier après ce premier appel, la "prochaine" d'entrée pour être transformés est ENCORE le mot
this
. La prochaine entrée ne change pas jusqu'à ce que vous lisez à partir du fichier.TL;DR
Lorsque vous appelez
hasNext()
lire à partir du fichier, sinon vous aurez toujours une boucle infinie.En outre
Si vous voulez vraiment utiliser
hasNext()
, ou souhaitez, vous pouvez créer un autreScanner
objet et de lire le fichier de compter les lignes, puis votre boucle, beau travail. aussi, vous devriez vraiment utiliserhasNextLine()
Espère que cela est utile.
OriginalL'auteur Hunter McMillen
inFile.hasNext()
ne pas déplacer le pointeur sur la ligne suivanteessayer cette
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#hasNext%28%29
Mais ne pense pas compter le nombre de jetons dans un fichier, pas le nombre de lignes?
Court, simple et doux. Je ne pouvais pas le faire fonctionner. Peut-être que j'ai fait quelque chose de mal?
Je suis désolé, ça n'a pas fonctionné pour vous, par la voie de quelle erreur avez-vous ? @AvaMango
Haha merci de ne pas m'excuser. C'est ma première fois à l'aide d'un Débordement de Pile et je suis SUPER impressionné par la façon dont tout le monde est utile. Je vais essayer à l'aide de votre code, je vais mettre à jour ce avec le message d'erreur quand je l'obtenir. Merci beaucoup pour toute votre aide!
OriginalL'auteur Zohaib
Pour le comptage du nombre de lignes
hasNextLine()
, au lieu dehasNext()
.Dans
while
boucle vous sont censés pour appelernextLine()
, parce que dans votre courant de la mise en œuvre du scanner est statique sur la première ligne. L'appel de cette méthode, il sera à passer à la ligne suivante, à chaque itération de la boucle.Se référer à l'extrait de code suivant:
OriginalL'auteur Taha
Vous ne pouvez pas utiliser le scanner à compter de la n de ligne dans le fichier parce que par défaut, le scanner utilise cet espace pour séparer les jetons. Je suggère d'utiliser BufferReader et la méthode readline.
http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html
Scanner
pour compter les lignes dans un fichier.hasNext()
utilise des espaces pour séparer les jetons par défaut, maishasNextLine()
ne l'est pas. Aussi, vous pouvez définir quel que soit délimiteur vous voulez séparer les jetons.Oui. vous êtes correct.
OriginalL'auteur nayakam