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 :

Problème avec mon expression régulière


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Avatar de romuluslepunk
    Homme Profil pro
    Juste passioné
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Juste passioné

    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Par défaut Problème avec mon expression régulière
    Bonjour,

    j'utilise une expression reguliere pour trouver toutes les adresses emails qui se trouvent dans un fichier texte.

    Voici comment je procède :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    // texte ou je vais chercher les emails
    String texte;
     
    // arraylist ou je met les adresse trouvee
    ArrayList<String> liste = new ArrayList<String>(0);
     
    // creation de l'entree
    FileReader entree;
    try
    	{
    	entree = new FileReader("/emplacement/fichier.txt");
    	}
    catch (FileNotFoundException e)
    	{
    	throw new Exception("Impossible d'ouvrir le fichier", e);
    	}
     
    // parcourt le fichier
    int c;
    try
    	{
    	while ((c = entree.read()) != -1)
    		{
    		texte = texte + (char) c;
    		}
    	}
    catch (IOException e)
    	{
    	throw new Exception("Impossible de lire le fichier", e);
    	}
     
    // definition de la regexp
    Pattern aChercher = Pattern.compile("[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@" +
    		"[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[_A-Za-z0-9-]+)");
    Matcher chercheur = aChercher.matcher(texte);
     
    // recherche les adresse
    while (chercheur.find())
    	{
    	String email = chercheur.group();
    	liste.add(email);
    	}
    Celà marche nickel si mon fichier ne commence pas par une adresse genre :Mais j'ai un problème si le fichier commence par une adresse :
    adresse@mail.com blabla
    adresse2@mail.com
    Dans ce cas j'obtient :
    nulladresse@mail.com
    adresse2@mail.com
    J'ai pioché le pattern sur internet car je suis en bille mais je pense pas que cela vienne de sa...
    Je suis perdu, merci de m'eclairer

  2. #2
    Membre éprouvé Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Par défaut
    Tu peux montrer le code d'affichage de ta liste ?
    Remarques :
    • Il vaut mieux définir ta liste comme une List :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      List<String> liste = new ArrayList<String>();
    • Pourquoi mettre tout ton fichier dans un buffer caractère par caractère ? Tu pourrais lire ligne par ligne et faire ta boucle de recherche par ligne...

  3. #3
    Membre éprouvé Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Par défaut
    ... Expression régulière est une mauvaise traduction, on dit expression rationnelle ;-)

  4. #4
    Membre confirmé
    Avatar de romuluslepunk
    Homme Profil pro
    Juste passioné
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Juste passioné

    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Par défaut
    Pour le test, j'ecris directment via println :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (Iterator<String> it = liste.ietrator(); it.hasNext();)
    	{
    	System.out.println(it.next());			
    	}
    Mais sinon j'affiche dans une JTable et le resultat est le meme.

    Caractère par caractère ou ligne par ligne reviens au meme non ?
    Je suppose que la methode qui retourne ligne par ligne lit les caractère 1 a 1 pour trouver une ligne donc il ne devrais pas y avoir de différence au niveau vitesse et ressource utilisé...
    Maintenant je me trompe peut être

  5. #5
    Membre confirmé
    Avatar de romuluslepunk
    Homme Profil pro
    Juste passioné
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Juste passioné

    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Par défaut
    J'ai trouvé, c'est vraiment une erreur de débutant....
    En même temps j'y suis doc...

    A la place de déclarer ma string comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String texte;
    // je fais :
    String texte = "";
    En la declarant comme ceci elle etait null donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    texte = texte + (char) c;
    // revenait a faire
    texte = null + (char) c;
    // au 1er caractère
    C'est vraiment tout bête

    Merci de t'être penché sur mon cas,
    j'ai un peu honte quand même

  6. #6
    Membre éprouvé Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Par défaut
    Il ne faut pas avoir honte : les erreurs les plus difficiles à trouver sont les plus simples...

    Si tu veux remplir une chaîne qui contient tout le contenu du fichier, ne fait pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte = texte + (char) c;
    ce qui crée une nouvelle chaine à chaque caractère ! Utilise un StringBuilder et un append() !

    Pourquoi pas la lecture caractères par caractères :
    • Si tu veux lire un caractère à la fois : pourquoi pas ! Mais toi tu veux lire des lignes !
    • Ensuite, tu va mettre en mémoire tout ton fichier alors que tu n'en as pas besoin, même si tu as beaucoup de mémoire, bof...
    • Avec un bon vieux BufferedReader, une boucle de readLine() et une recherche dans la ligne courante c'est plus propre...
    • Ton fichier est petit, ton code marche... mais il vaut mieux toujours bien faire...

  7. #7
    Membre confirmé
    Avatar de romuluslepunk
    Homme Profil pro
    Juste passioné
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Juste passioné

    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Par défaut
    Effectivement je vais utiliser StringBuilder.

    Ce n'est pas une mauvaise idée de recherche les adresses dans la ligne puis passer à la ligne suivante.
    Mais je vais avoir un problème de conception, la lecture ce fait dans une class et la recherche dans une autre. J'utilise le pattern 'patron de methode'.
    Mais je peut regarder à changer la conception pour le permettre.

    Merci des conseils

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

Discussions similaires

  1. Problème avec mon expression régulière
    Par luffydu22 dans le forum Débuter
    Réponses: 6
    Dernier message: 16/07/2010, 14h32
  2. [RegEx] problème avec une expression régulière
    Par sissi25 dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2007, 09h12
  3. Problème avec une expression régulière
    Par Darkroro dans le forum Langage
    Réponses: 7
    Dernier message: 09/10/2006, 12h13
  4. [VB.net][vs2005] Problème avec les expressions régulières
    Par zouhib dans le forum Windows Forms
    Réponses: 13
    Dernier message: 22/06/2006, 15h56
  5. Problème avec les expressions régulières
    Par Premium dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 18/06/2006, 16h41

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