IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Enlever mots d'une arraylist


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut Enlever mots d'une arraylist
    Bonsoir,

    Je cherche à enlever d'une Arraylist de String (mots) les mots présent dans un fichier .txt

    Voici le code que j'ai écris pour le moment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public static String removeStopWords(String str,File file) throws IOException{
        	BufferedReader br = new BufferedReader(new FileReader(file));
        	try{
     
        	String[] strTab = str.split(",");
        	ArrayList<String> list = new ArrayList<String>(Arrays.asList(strTab)); // conversion de la string en arraylist
        	Iterator<String> itr = list.iterator();
        	String line = br.readLine();
            //parcours du texte arraylist
        	while(itr.hasNext()){
        		//parcours du fichier txt de stopwords
        		while((line != null)){
        			if(itr.equals(line))
        				itr.remove(); // on enlève le stopwords présent dans l'arraylist
        		}
        		itr.next();
        	 }
        	//conversion Arraylist en string
        	String text = "";
        	for(String s : list)
        		text += s + " ";
        	System.out.println(text);
        	return text;
       } finally{
    	   br.close();
       }
        }
    Seulement ça ne m'affiche rien dans la console, j'ai pourtant fermé mes deux boucles et fermé le bufferedreader.
    J'ai l'impression que la méthode boucle à l'infini.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Alors pour rappel :
    - Les collections ont une méthode remove() qui sert à enlever un objet qu'elles contiennent. Ce sera bien plus simple de t'en servir, que de chercher toi-même l'objet à enlever.
    - readLine() ne lit qu'une seule ligne. En toute logique il faudrait l'appeler plusieurs fois, pas une.
    - D'où vient itr déjà ? En quoi itérer là-dessus pourrait-il avoir le moindre effet sur line ? (Sans compter qu'il n'y a de toute façon pas d'itération sans itr.next()...)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut
    Par "Collection" vous entendez les Hashset ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public static String removeStopWords(String str) throws IOException{
     
        	String line;
        	String[] strTab = str.split(",");
        	HashSet<String> hashset = new HashSet<String>(Arrays.asList(strTab)); // conversion de la string en arraylist
        	Iterator<String> itr = hashset.iterator();
     
        	br = new BufferedReader(new FileReader("StopWords.txt"));
            //parcours du texte arraylist
        	while(itr.hasNext()){
        		String n = itr.next();
        		//parcours du fichier txt de stopwords
        		while((line = br.readLine()) != null){
        			System.out.println(line);
        			if(n.equals(line))
        				itr.remove(); // on enlève le stopword présent dans l'arraylist
        		}
        	 }
        	//conversion Arraylist en string
        	String text = "";
        	for(String s : hashset)
        		text += s + " ";
        	System.out.println(text);
        	return text;
       }
    J'ai modifié deux trois trucs, notamment changer l'Arraylist en hashet
    Bref maintenant la console m'affiche la String passé en argument telle quelle, aucun mot n'a été enlevé, pourtant je pensais que les iterator.remove() supprimerait les String en questions.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par OrangeAmps Voir le message
    Par "Collection" vous entendez les Hashset ?
    J'entends absolument toutes les Collections.
    Donc notamment ArrayList, et aussi LinkedList, et TreeSet, LinkedHashSet et oui, HashSet aussi. Ainsi qu'absolument toutes les autres. Elles ont toutes une méthode remove().
    L'idée de cette méthode, c'est de faire comme si elle était là et s'en servir. Pas de faire comme si elle était pas là et ne pas s'en servir.

    Puisqu'il existe une méthode pour enlever des trucs de la liste, tu n'as pas besoin d'un itérateur pour le faire, évidemment -_-° ! Ta variable itr est parfaitement inutile et n'a pas de raison d'être. Ne parlons même pas de la boucle dessus.

    Citation Envoyé par OrangeAmps Voir le message
    Bref maintenant la console m'affiche la String passé en argument telle quelle, aucun mot n'a été enlevé, pourtant je pensais que les iterator.remove() supprimerait les String en questions.
    Ça ne marche pas parce que tu lis toutes les lignes de ton fichier, lors de ta toute première boucle, au tout premier appel de next(). Donc aux boucles suivantes, le fichier a été entièrement lu et il n'y a plus de ligne, donc aucun mot à enlever.
    Ton programme est fait n'importe comment, il est clair que tu ne comprends rien à ce que tu fais.
    Mais la première chose à faire, c'est d'arrêter d'utiliser un itérateur, puisqu'il ne sert à rien. Ça simplifiera un peu les choses. Notamment, tu n'auras plus de boucle imbriquée.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Enlever des mots d'une chaine de caractères
    Par daniel1985 dans le forum Général Java
    Réponses: 1
    Dernier message: 20/03/2013, 16h49
  3. Comment enlever un mot d'une chaine?
    Par benjiprog dans le forum C
    Réponses: 8
    Dernier message: 21/04/2006, 17h00
  4. [Collections]enlever des éléments répétés dans une ArrayList
    Par apan dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 23/03/2006, 13h28
  5. [Collections]Compter les mots différents d'une ArrayList
    Par alanpix dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/11/2005, 22h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo