NoSuchElementException at StringTokenizer.nextToken

Résolu
chida29 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -  
chida29 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je débute en java donc svp aidez moi!!
j'ai un programme et quand je l'exécute il me donne cette erreur:

Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
at programmeprincipale.lecturefichier.main(lecturefichier.java:41)

je fait quoi?
Merci d'avance
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Avant de faire un nextToken tu dois faire un test hasMoreTokens pour vérifier que tu as bien des éléments à lire après, sinon ça n'a pas de sens, d'où l'exception.

Remarque : la classe StringTokenizer ne devrait plus être utilisée, elle n'est conservée que pour la compatibilité des anciens programmes. Voir la documentation officielle.

"StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead."
1
chida29 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai bien fait ce test..
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > chida29 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
On n'a pas ton code, donc on est obligé de jouer aux devinettes. Montre nous ton code et on te dira.
0
chida29 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   > chida29 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
le voilà....

public class lecturefichier {

static File collection =new File("E:\\collection\\collection.txt");

public static void main(String[] args) {

BufferedReader in2=null;
String ligne2;
boolean eof=false;
try //lecture du fichier collention.txt
{
in2=new BufferedReader(new FileReader(collection));
ArrayList<String> tab=new ArrayList<String>();
boolean bool=false;
while (eof !=true)
{
ligne2=in2.readLine();
if (ligne2 !=null) { //System.out.println(ligne2);}
StringTokenizer str=new StringTokenizer(ligne2.trim());
String tok=null;
if (ligne2.startsWith("<ABSTRACT>"));
{
bool=true;
//ligne2=in2.readLine();
tok=str.nextToken();
tok=str.nextToken();
tok=str.nextToken();
}
if (bool==true)
{
while(str.hasMoreTokens())
{
if(tok.trim().equals("</ABSTRACT>)")==false)
{
tab.add(tok);
tok=str.nextToken();
}
else
bool=false;
}
}
}

else { eof=true; }
System.out.println(tab);

}
} catch (FileNotFoundException ex) {
System.out.println("fichier non trouvé");
} catch(IOException ex){
System.out.println("erreur lecture ligne fichier");
} //fin de la lecture du fichier collection.txt

}
}
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > chida29 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
C'est bien ce que je disais, tu ne testes pas hasMoreTokens, en tout cas pas ici :

tok=str.nextToken(); 
tok=str.nextToken(); 
tok=str.nextToken();

De plus ta boucle while est fausse :

while(str.hasMoreTokens()) 
{ 
	if(tok.trim().equals("</ABSTRACT>)")==false) 
	{ 
		tab.add(tok); 
		tok=str.nextToken(); 
	} 
	else 
		bool=false; 
}


En effet si ta condition "if" n'est pas vérifié alors tu ne lis pas le mot "tok" suivant, donc tu testes toujours la même chose dans le str.hasMoreTokens() et ton programme tourne en rond.
0
chida29 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   > chida29 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
je fais quoi alors?
0