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 :

Problème entre affichage et traitement d'un string


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Problème entre affichage et traitement d'un string
    Bonjour,
    J'ai un problème que je n'arrive pas à résoudre. Ce programme me sert à chercher des adresses mails dans un document texte à partir des expressions régulières :
    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
     
     public void search() throws IOException{ 	
    	  	boolean b =true;
    		String s ="[_a-zA-Z\\d\\-\\.]+@[_a-zA-Z\\d\\-\\.]+(\\.[_a-zA-Z\\d\\-]{2,4})";
    		pattern = Pattern.compile(s);
    	  	String line = a.readLine() ;
      	    while (line != null) {
      	    	m = pattern.matcher(line) ;
      	    	System.out.println(m.find());
      	    while(m.find()){
      	      	for(int i=0; i<=m.groupCount(); i++) {
    		 	  if(counts.containsKey(m.group(i))){
      	          ((Counter)counts.get(m.group(i))).increment();}
      	        else{
      	          counts.put(m.group(i), new Counter());}			
      	      	}
      	      }
      	      line = a.readLine() ;
    	 	}
    	 }
    Lorsque je rentre directement mon expression régulière dans le code (comme ci-dessus), le programme fonctionne correctement, il m'affiche bien des adresses mails.
    Mais, je voulais pouvoir accéder à une sorte de dictionnaire d'expression régulière dans un fichier txt. J'ai donc créé une autre classe qui me permet de récupérer l'expression régulière dans ce fichier txt. Et là c'est le drame, l'affichage de l'expression régulière est correct dans la console. Par contre, je n'ai aucun résultat positif de mon expression régulière. Comme s'il y avait une différence entre l'affichage et le traitement de ma chaine de caractè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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    private WordCount wc;
    	private Object [][] data ;
    	private DicPattern d;
    	private Object [] t;
     
    public Table(lister l, int j){
    		this.wc=null;
    		   try{
    		d = new DicPattern("C:\\Documents and Settings\\Leneuf\\Bureau\\pattern\\pattern.txt");
    		   t=d.getHashPattern().values().toArray();
    		   int m = d.getNbPattern();
    			try {
    			  for (int n=0;n<m;n++){
    			  wc=new WordCount(l.getVector().get(j).toString());
    			  wc.search(t[n].toString());
    ...//je passe la suite
     
    //j'ai donc modifier ma méthode search en conséquence
     
     public void search(String s) throws IOException{
    	  	boolean b =true;
    		System.out.println(s);
    		pattern = Pattern.compile(s);
    	  	String line = a.readLine() ;
      	    while (line != null) {
      	    	m = pattern.matcher(line) ;
      	    	System.out.println(m.find());
      	    while(m.find()){
      	      	for(int i=0; i<=m.groupCount(); i++) {
    		 	  if(counts.containsKey(m.group(i))){
      	          ((Counter)counts.get(m.group(i))).increment();}
      	        else{
      	          counts.put(m.group(i), new Counter());}			
      	      	}
      	      }
      	      line = a.readLine() ;
    	 	}
    	 }
    J'ai l'impression qu'il y a un problème d'encodage de ma chaine de caractère.
    j'ai aussi essayé avec clavier.lireString(). J'ai le même problème.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    On pourrait voir à quoi ressemble ton fichier et comment tu le lis ???

    a++

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Le fichier se compose ainsi :
    ligne impair->type de l'expression régulière qui le suit
    ligne pair -> expression régulière du type qui la précède.
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    E-mail
    "[_a-zA-Z\\d\\-\\.]+@[_a-zA-Z\\d\\-\\.]+(\\.[_a-zA-Z\\d\\-]{2,4})"
    Word of 5 or 6 letters
    "(?<=(?:\\s|\\G|\\A))\\w{5,6}(?=(?:\\s|\\Z|\\.|\\?|\\!))"
    La classe DicPattern me permet de lire ce fichier de récupérer le type et l'expression régulière, de les stocker dans une HashMap :
    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
     
    public class DicPattern {
     
    	  private FileReader file;
    	  private BufferedReader a;
    	  private HashMap h;
     
     
    	  public DicPattern(String Filename) throws FileNotFoundException{
    		  file = new FileReader(Filename);
    	      a = new BufferedReader(file);
    		  this.h=new HashMap();
    	  }
     
    	  public HashMap getHashPattern() throws IOException{
     
    		  String line = a.readLine();
    		  String pattern = null;
    		  String type = null;
    		  int i = 1;
    		  String b = "";
    		  while(line != null){
    		  	if(i % 2==1){
    				 type = line;
    			  }
    			  if(i%2 == 0){
    			  	pattern = line;
    			  	h.put(type,pattern);
    			  }
    			  i++;
    			  line = a.readLine();
    		  }
    		  return this.h;
    	  }
    Je pense cette classe n'a pas de problème puisque lorsque je lui demande l'affichage des types et exp, tout est correct.J'ai testé avec et sans guillemet, ça ne change rien.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Justement : à l'intérieur de ton fichier tu ne dois pas doubler tes anti-slash : \\ devient \ !


    En effet les \\ sont interprété par le compilateur afin de gérer les caractères spéciaux.

    Ainsi si tu affiches ta regexp lorsqu'elle est en dur dans le code, tu verrais que tu n'as plus qu'un seul \ au lieu de 2. Il faut donc que ce soit le cas également par ton fichier (car tu n'interpètes pas les caractères spéciaux lorsque tu le lis).

    Le fait de doubler les \ (FAQ : Pourquoi dois-je doubler/quadrupler le caractère anti-slash ('\') ?) ne concerne que les codes sources et non pas les fichiers que tu lis (a moins que cela ne soit interprété lors de la lecture).

    a++

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup, j'avais pas du tout pensé à cela.

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

Discussions similaires

  1. Problème d'affichage entre swf local et serveur
    Par djhanihill dans le forum Flash
    Réponses: 1
    Dernier message: 24/01/2008, 19h15
  2. Problème d'affichage Crystal Report entre deux machines.
    Par gwadakillah dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 20/09/2007, 14h01
  3. [Configuration] Problème d'affichage entre le php et html
    Par arioule dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 19/09/2007, 10h30
  4. Réponses: 3
    Dernier message: 22/08/2007, 16h53
  5. Problème d'affichage de liste entre IE et FireFox
    Par slideveloppeur2006 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/07/2006, 11h07

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