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 :

Scanner, Pattern, useDelimiter pour extraire une chaine d'un texte


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Par défaut Scanner, Pattern, useDelimiter pour extraire une chaine d'un texte
    Salut !

    J'ai un petit problème avec la définition de useDelimiter qui va me permettre d'avoir le résultat voulu à la fin .
    Je m'explique encore plus : en gros j'ai un texte de la forme suivante :
    Project name: Coffre
    pk1.Pierre
    getValeur: int
    getPoids: int
    getVolume: int
    expertise: int

    Project name: hello
    et je veux récupérer que les noms de projets et les mettre dans un tableau de string, j'ai donc pensé à utiliser les scanner en Java et je ne sais pas si c'est bien la meilleure méthode. J'ai un peu de mal à définir le bon delimiter. Voilà ce que j'ai fait et qui ne marche pas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Pattern myPat = Pattern.compile("Project name");
    Scanner myScan = new Scanner(new FileReader(test)).useDelimiter(":  ");
    while(myScan.hasNext()){
            String [] items = new String [getNbProjects()];
            if(myScan.hasNext(myPat)){
                    System.out.println(getNbProjects());
    		for( int i =0 ; i <=getNbProjects() ; i++){
    			items[i] = myScan.next();
    			System.out.println(items[i]);
    		}
    	}break;
    }
    avec ce bout de code j'obtiens le nom du projet et tout ce qui vient après jusqu'à la prochaine fois où on rencontre le pattern "Project name"
    Est ce que vous pouvez m'aider pour trouver la bonne solution et merci d'avance pour votre patience

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Regarde peut être pour utiliser une expression régulière.

    avec quelques chose de ce style, tu devrais être tranquille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Project name: [a-zA-Z0-9]+"
    Si tu as des questions relatives à l'utilisation des expressions régulières avec Java, je t'invite à regarder l'un des nombreux sujet s'y rapportant

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Par défaut
    Salut !

    merci pour la réponse, j'ai essayé mais ça ne marche pas là il n'affiche plus rien du tout
    j'ai gardé le useDelimiter mais je ne sais pas c'est quoi le problème, il n'entre pas dans la boucle if

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Mon code comporte surement pleins d'erreurs mais voilà l'idée. Penche toi plutôt sur l'utilisation d'expression régulière dans ton cas. Et remplace ma fonction split() par une expression régulière.

    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
    Matcher matcher;
    String ligne;
     
    File fichier = new File(test);
    Scanner lecteur = new Scanner(fichier);
     
    Pattern pattern = Pattern.compile("Project name: [a-zA-Z0-9]+"); // je réutilise les conseils de michon
     
    while (lecteur.hasNext()) ligne += lecteur.next() {
      System.out.println(ligne);
     
      matcher = pattern.matcher(ligne);
     
      if (matcher.find()) { // le motif a bien été découvert
        Pattern p = Pattern.compile(":");
     
    	String[] listes = p.split(ligne);  // mais l'utilisation de split() c'est juste parce que je suis une buse en expressions régulières (y'a bien mieux à faire)
    	System.out.println("Ton nom de projet : " + listes[1]);
      }
    }
    PS : Pardonnez moi mes erreurs, les Regex en Java, je n'ai jamais souvent utilisé ça.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

Discussions similaires

  1. [RegExp] y a-t-il plus simple pour extraire sous-chaine d'une chaine ?
    Par laurentSc dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 17/03/2011, 17h16
  2. Réponses: 5
    Dernier message: 04/07/2007, 18h31
  3. [RegEx] Extraire une chaine
    Par pierre50 dans le forum Langage
    Réponses: 8
    Dernier message: 15/09/2005, 12h43
  4. [langage] cherche script pour formater une chaine
    Par MASSAKA dans le forum Langage
    Réponses: 7
    Dernier message: 12/11/2003, 12h18
  5. Réponses: 2
    Dernier message: 10/07/2002, 11h51

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