NoSuchElementException at StringTokenizer.nextToken
Résolu
chida29
Messages postés
32
Statut
Membre
-
chida29 Messages postés 32 Statut Membre -
chida29 Messages postés 32 Statut Membre -
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
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:
- Exception in thread main java.util.nosuchelementexception
- Seti at home - Télécharger - Web & Internet
- World at arms - Télécharger - Rôle RPG
- This is the mail system at host ✓ - Forum Mail
- Disc at once - Forum Gravure
- Irql gt zero at system service - Forum Windows 10
1 réponse
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."
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."
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
}
}
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.