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

avec Java Discussion :

Récupérer le prénom après le 1er espace ou le 2ème


Sujet :

avec Java

  1. #1
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut Récupérer le prénom après le 1er espace ou le 2ème
    Bonjour,

    Je récupère mes cellules via un fichier excel sous cette forme:
    [nom]espace[prénom] (ex: traoré amadou)
    et
    [nom]espace[nom]espace[prénom] (ex: le duc marcel)

    Je souhaite juste récupérer le prénom.
    Je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prenom_recup = prenom_agent.substring(prenom_agent.indexOf(" "));
    Ca marche pas.

    Quelqu'un a-t-il une idée ?
    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut
    Comme son nom l'indique, prenom_agent.indexOf(" ") va te retourner un entier représentant la position où (" ") a été rencontré. Donc c'est logique que ça ne rentre pas dans un String.

    Tu devrais plutôt utiliser String.split(String)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Le duc Marcel".split(" ");
    te renvoie le tableau
    {"Le";"duc";"Marcel"}

    Donc je pense qu'il te faut un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prenom_agent.split(" ")[2]

  3. #3
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Je fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    prenom_agent=row.getCell(1).getStringCellValue();//on récupère le nom+prénom de l'agent
    					prenom_recup = prenom_agent.split(" ");
    					System.out.println("prenom_recup"+prenom_recup);
    et m'affiche ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    prenom_recup[Ljava.lang.String;@1724a9d
    prenom_recup[Ljava.lang.String;@80cac9
    prenom_recup[Ljava.lang.String;@18166e5
    prenom_recup[Ljava.lang.String;@8a548b
    prenom_recup[Ljava.lang.String;@1b4a74b
    prenom_recup[Ljava.lang.String;@15356d5
    prenom_recup[Ljava.lang.String;@69d02b
    prenom_recup[Ljava.lang.String;@e1eea8
    prenom_recup[Ljava.lang.String;@fb6354
    prenom_recup[Ljava.lang.String;@364641
    prenom_recup[Ljava.lang.String;@13e754f
    prenom_recup[Ljava.lang.String;@187c55c
    prenom_recup[Ljava.lang.String;@ae3364
    Je suppose que je mit suit mal pris avec le split() c'est sur!

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut
    String.split renvoie un String[]

    donc en gros, il te fait des System.out.println(String[]);

    Dans ce tableau, ce qui t'intéresse, c'est le 3ème élément (donc index 2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    prenom_recup = prenom_agent.split(" ")[2];

  5. #5
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Quand je fais cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(cell2 != null){
    					//System.out.println(cell2.getRowIndex() + ":"+ cell2.getColumnIndex() + " - " + cell2 + " : "+ cell2.getCellType());
    					//prendre que les prénom
    					prenom_agent=row.getCell(1).getStringCellValue();//on récupère le nom+prénom de l'agent
    					prenom_recup = prenom_agent.split(" ")[2];
    					System.out.println("prenom_recup"+prenom_recup);
     
    					}
    J'ai cette erreur-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    	at Extraction2.main(Extraction2.java:149)
    la ligne 149 est:
    prenom_recup = prenom_agent.split(" ")[2];
    c'est un dépassement de tableau je suppose il doit pas trouvé les valeurs.
    donc j'ai fait:
    prenom_recup = prenom_agent.split(" ")[0];

    et la j'ai rien donc mon String prenom_recup:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    prenom_recup 
    prenom_recup 
    prenom_recup 
    prenom_recup 
    prenom_recup 
    prenom_recup

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2011
    Messages : 101
    Par défaut
    L'ArrayList est juste là pour faire un exemple général, le code qui t'intéresse est en rouge.

    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
    ArrayList<String> cell=new ArrayList<String>();
    cell.add("Lagaffe Gaston");
    cell.add("Van Dercken Jean");
    
    for(int i=0;i<cell.size();i++)
    {
    	String[] mots=cell.get(i).split(" ");
    	String prenom;
    	if(mots.length==2)
    	{
    		prenom=mots[1];
    	}
    	else
    	{
    		prenom=mots[2];
    	}
    	System.out.println(prenom);
    }
    Si tu veux inclure dans ton code, ça donnerait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    prenom_agent=row.getCell(1).getStringCellValue();//on récupère le nom+prénom de l'agent
    String[] mots=prenom_agent.split(" ");
    if(mots.length==2)
    {
    	prenom_recup=mots[1];
    }
    else
    {
    	prenom_recup=mots[2];
    }
    System.out.println("prenom_recup"+prenom_recup);

  7. #7
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    J'ai cette erreur-ci encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    	at Extraction2.main(Extraction2.java:156)
    pour le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prenom_recup=mots[2];
    du coup j'ai changer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prenom_recup=mots[0];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prenom_recup=mots[1];
    ca me met a l'affichage des null partout

  8. #8
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2011
    Messages : 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    prenom_agent=row.getCell(1).getStringCellValue();//on récupère le nom+prénom de l'agent
    System.out.println(prenom_agent);
    Est-ce que ça affiche bien un String du type : "Nom Prénom" ?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut
    Attends voir, tu dis que tu récupères tes données depuis excel...

    A mon avis, ton séparateur de champ, c'est pas un espace (" ") mais plutôt un tab ("\t")

    Essaie d'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prenom_agent.split("\t");
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prenom_agent.split(" ");

  10. #10
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2011
    Messages : 101
    Par défaut
    Il n'aurait pas une réponse vallant NULL pour cette requête :

    J'ai plutôt l'impression que la méthode de récupération de valeur de la cellule n'est pas correcte...

  11. #11
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    J'ai vérifié j'ai fait une gourde.
    J'ai utilise row.get... au lieu de row2.get....
    Du coup, je récupèrai la ligne de l'autre fichier.

    Bref, ça n'empeche pas que sur la console j'ai cette erreur-ci à la fin de mon affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    prenom_recupCAMILLE
    prenom_recupYOHANN
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    	at Extraction2.main(Extraction2.java:149)
    prenom_recupADELINE
    prenom_recupBOURDAISprenom_recupCALVEZ
    prenom_recupCOQprenom_recupNAOURprenom_recupOPHELIE
    prenom_recupLAURA
    prenom_recupPAULE
    prenom_recupASSMA
    Quand je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(cell2 != null){
    					//System.out.println(cell2);
    					//prendre que les prénom
    						prenom_agent=row2.getCell(1).getStringCellValue();//on récupère le nom+prénom de l'agent
    						prenom_recup = prenom_agent.split(" ")[1];
    						System.out.println("prenom_recup"+prenom_recup);
     
    					}

    Je constate aussi que pour les lignes en rouge sur ma console, ceux qui on un nom composé d'un espace, il y'a que le 2ème ot pris en charge (ex: pour LE BEL JEAN David j'ai à l'affichage BEL au lieu d'avoir David)

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut
    Pour moi, le contenu de son excel est pas clair...

    @mouss4rs:

    Tu peux exécuter ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		for(char c:prenom_agent.toCharArray()){
    			System.out.println((int)c);
    		}
    et nous dire ce que ça te donne?

    EDIT : ce n'est plus la peine, tu as apparemment trouvé le problème
    Pour ton out of bound à la fin... je sais pas, regarde le contenu de ton excel : tu es certain qu'il y a toujours un nom ET un prénom? tu n'as pas de lignes sur lesquelles il manque des infos?

  13. #13
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2011
    Messages : 101
    Par défaut
    Cela doit venir de cette condition :


    La cellule n'est surement pas null car elle existe... Il faut vérifier si le contenu est null.

    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(row2.getCell(1).getStringCellValue() != null)
    ou alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(cell2.getStringCellValue()  != null)

  14. #14
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Youhouhhhh!

    Merci a vous deux les gars.

    C'est bon, le feu est éteint avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    prenom_agent=row2.getCell(1).getStringCellValue();//on récupère le nom+prénom de l'agent
    						String[] mots=prenom_agent.split(" ");
    						//if(mots.length!=0){
    						if(mots.length==2)
    						{
    							prenom_recup=mots[1];
    							System.out.println("sans un espace ds le nom"+prenom_recup);
    						}
    						if(mots.length==3)
    						{
    							prenom_recup=mots[2];
    							System.out.println("avec un espace ds le nom"+prenom_recup);
    						}
    Un grand merci

  15. #15
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Par défaut
    Salut,

    Tu avais aussi cette possibilité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String nomPrenom = "  Le duc Marcel  "; // cas 2 espaces
             //String nomPrenom = "Leduc Marcel"; // cas 1 espace
             //String nomPrenom = "LeducMarcel"; // cas sans espaces ERREUR
     
             nomPrenom = nomPrenom.trim(); // pour supprimer les éventuels espaces au début ou à la fin du String
             int index = nomPrenom.lastIndexOf(" ");
             if(index == -1)
                System.out.println("Attention, il n'y a pas d'espaces !!!");
             else
                System.out.println("Prénom: " + nomPrenom.substring(index +1));
    Cordialement,

    Dan

  16. #16
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Par défaut
    Citation Envoyé par mouss4rs Voir le message
    Bonjour,

    Je récupère mes cellules via un fichier excel sous cette forme:
    [nom]espace[prénom] (ex: traoré amadou)
    et
    [nom]espace[nom]espace[prénom] (ex: le duc marcel)

    Je souhaite juste récupérer le prénom.
    Je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prenom_recup = prenom_agent.substring(prenom_agent.indexOf(" "));
    Ca marche pas.

    Quelqu'un a-t-il une idée ?
    Merci
    Ton premier post était pourtant tout près de ce qu'il fallait faire.

    ci-dessous ce qu'il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prenom_recup = prenom_agent.substring(prenom_agent.lasIndexOf(" ") +1);
    Mais attention, on ne peut pas détecter une éventuelle absence d'espaces en testant si index est à -1 , il faudrait pour le détecter, "dégrouper" indexOf et substring.
    On ne contrôle pas non plus la présence indésirable d'espace(s) au mauvais endroit.

  17. #17
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Par défaut
    Citation Envoyé par liouan Voir le message
    Comme son nom l'indique, prenom_agent.indexOf(" ") va te retourner un entier représentant la position où (" ") a été rencontré. Donc c'est logique que ça ne rentre pas dans un String.

    Tu devrais plutôt utiliser String.split(String)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Le duc Marcel".split(" ");
    te renvoie le tableau
    {"Le";"duc";"Marcel"}

    Donc je pense qu'il te faut un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prenom_agent.split(" ")[2]
    La position de (" ") obtenue est justement ce dont a besoin substring, mais dans le cas présent de 2 espaces, ce n'est pas le premier espace qui fait qu'on obtient " duc Marcel" mais l'adresse +1 du dernier espace obtenu avec lastIndexOf(" ") +1 (+1 pour éviter d'obtenir " Marcel" aulieu de "Marcel") et ce sera bon même s'il n'y a qu'un seul espace comme par exemple avec "Leduc Marcel" le dernier espace étant le premier. Voir (revoir) le fonctionnement de substring...

    Cordialement,

    Dan

  18. #18
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par mouss4rs Voir le message
    Bonjour,

    Je récupère mes cellules via un fichier excel sous cette forme:
    [nom]espace[prénom] (ex: traoré amadou)
    et
    [nom]espace[nom]espace[prénom] (ex: le duc marcel)

    Je souhaite juste récupérer le prénom.
    sans vouloir rentrer dans les détails techniques la spécification elle-même est un gros problème (s'il s'agit d'une application réelle).
    Je dis ça parce que j'ai un prénom composé sans tiret au milieu et je souffre constamment de toutes les erreurs que provoquent ce genre de pratique ... et encore j'ai pas à me plaindre : pour ma fille l'espace se trouve dans le prénom ET dans le nom de famille!

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

Discussions similaires

  1. Récupérer ses données après formatage
    Par Sékiltoyai dans le forum Composants
    Réponses: 7
    Dernier message: 21/04/2007, 18h01
  2. [vb/C#] Récupérer un id apres insertion
    Par blast078 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 13/04/2006, 21h59
  3. Récupérer sortie standard après redirection vers un fichier.
    Par sozie9372 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/03/2006, 15h10
  4. Réponses: 8
    Dernier message: 25/01/2006, 12h06
  5. Récupérer le numéroAuto après CurrentDb.Execute strSQL
    Par Tchupacabra dans le forum Access
    Réponses: 4
    Dernier message: 03/01/2006, 16h50

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