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

Langage Java Discussion :

Difficulté à extraire les lettres d'un string


Sujet :

Langage Java

  1. #1
    Membre régulier
    Homme Profil pro
    Analyste IP + Programmation
    Inscrit en
    Février 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste IP + Programmation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2016
    Messages : 59
    Points : 72
    Points
    72
    Par défaut Difficulté à extraire les lettres d'un string
    Bonjour ,

    Dans le cadre de mon tp2 je dois saisir une phrase à l'écran pour l'inclure dans un String.

    Ensuite, je dois extraite les mots de cette phrase et mettre ces mots dans un tableau, pour le besoin de la cause j'utilise un Arraylist<String>

    J'ai trouvé des choses sur le net pour essayer d’extraire ces mots...Il y a la méthode split qui n,a pas trop bien marché (il me manque certain mot dans mon arraylist lol

    Voici le code qui fait cette job :

    Mon programme comprend plus que ça mais je vous montre seulement mon extraction de mots qui marche mal

    Ce code fait partir de la classe TableauMot

    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
    [JAVA]
    Arraylist<String> tableauMot = new Arraylist<>();
    String phrase= "La phrase contient des mots"; 
     
    char lettre = ' ';        
    String constructionMot = "";
    phrase= phrase.toUpperCase();
     
    for (int i = 0; i < phrase.length(); i++){ 
                lettre = phrase.charAt(i); // Ici, j'insère le charactère d'où nous sommes rendu dans la phrase.
                if ( Character.isLetter(lettre)){  // Si c'est une lettre, alors -> Une méthode que j'ai trouvé, quand cela va marcher, je vais ajouter isDigit() et isSpace()
                    constructionMot = constructionMot+lettre; // On insère la lettre dans le mot en construction.               
                } else {                
                    tableauMot .add(constructionMot); // Si nous n'avons pas une lettre alors on insère le mot dans le tableau, après on vide le string du mot en construction et on repart de nouveau.              
                    constructionMot = "";
                }  
            }

    Exécution de ce code donne :

    Ces deux lignes sont exécutées via ma classe principale dans mon main.

    LA PHRASE CONTIENT DES MOTS -> Le fameux System.out.println(phrase);
    [ PHRASE, CONTIENT, DES, ] - > Utilisation de la méthode public String toString()

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Si on exécute ton code (en faisant la correction de ArrayList bien sûr), on obtient [LA, PHRASE, CONTIENT, DES], pas [PHRASE, CONTIENT, DES].
    Et si le dernier mot manque, c'est parce que ta condition pour détecter qu'on a un nouveau mot à ajouter à tableauMot est la présence d'un caractère qui n'est pas une lettre, donc au moins la présence d'un caractère. Or à la fin de la phrase, pour le dernier mot, il n'y a pas de caractère après, puisqu'on est après la fin de la chaîne. Dans ce genre de boucle, il faut toujours traiter le dernier cas après la fin de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (int i = 0; i < phrase.length(); i++){ 
              //** ton code  
            }
    if ( constructionMot.length()!=0 ) { // s'il y a un mot qui reste
       tableauMot.add(constructionMot); // alors il faut l'ajouter à la liste.
    }
    Sinon, je ne sais pas ce que tu as fait avec split(), mais avec ce qui suit, on a bien tous les mots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String[] mots = phrase.toUpperCase().split(" ");
    for(String mot : mots) {
        tableauMot.add(mot);
    }
    Si tu veux pouvoir découper la phrase en tenant compte de la ponctuation, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    List<String> tableauMot = new ArrayList<>();
    String phrase= "La phrase contient des mots, et de la ponctuation aussi !"; 
     
    for(String mot : phrase.split("( |\\p{Punct})+") ) { // on découpe en prenant comme séparateur tout ensemble d'espaces et de signes de ponctuation d'au moins un caractère
       tableauMot.add(mot);
    }
     
    System.out.println(tableauMot);
    A noter, par ailleurs, qu'il faut éviter de faire des concaténations à tout va dans une boucle (ça crée plein de StringBuilder, ça consomme de la mémoire, et du temps pour la libérer, inutilement). Préférer également créer les variables localement (là où on en a besoin), pas au début du programme, en leur donnant une valeur bidon.

    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
     
    List<String> tableauMot = new Arraylist<>();
    String phrase= "La phrase contient des mots".toUpperCase(); 
     
    StringBuilder constructionMot = new StringBuilder();
     
    for (int i = 0; i < phrase.length(); i++){ 
       char lettre = phrase.charAt(i); 
       if ( lettre==' ' ) {
           if ( constructionMot.length()!=0 ) {
                    tableauMot .add(constructionMot.toString()); 
           }
           constructionMot.setLength(0);
       }
       else {
           constructionMot.append(lettre);
       }
    }
    if ( constructionMot.length()!=0 ) {
       tableauMot .add(constructionMot.toString()); 
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Fonction permettant d'extraire les Lettres d'une chaine de caractères
    Par volubiliss dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/09/2010, 07h49
  2. Extraire les données d'une string
    Par bastian06n dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/08/2010, 15h16
  3. [MySQL] Extraire les lettres d’un champ
    Par Fujee dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/05/2010, 14h05
  4. Extraire les lettres d’un champ
    Par Fujee dans le forum Requêtes
    Réponses: 0
    Dernier message: 08/05/2010, 13h58
  5. [C#] Comment extraire les parties d'une string ?
    Par mrpowerboy dans le forum C#
    Réponses: 3
    Dernier message: 21/02/2006, 09h10

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