Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
652 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] regex, pattern, matcher et group sont dans un bateau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] regex, pattern, matcher et group sont dans un bateau

n°815736
lint
O_O
Posté le 05-08-2004 à 11:58:18  profilanswer
 

bonjour
 
je voudrais remplacer plusieurs chaines de caractères par elles-mêmes plus une ou plusieurs autres chaines de caractères.
les chaines à matcher sont dans String[] keywordsTab, le texte a modifier dans String textStr, je boucle sur keywordTab et je recherche chaque chaine individuellement.
 
mon problème : je n'arrive pas a récupérer ce qui a été réellement matché. pour respecter la case par exemple je ne peux pas insérer mon keywordsTab[i] au milieu du texte.
j'ai vu que la méthode group(int) premettait de récupérer le résultat de la recherche précédente mais tout ce que j'ai c'est  

Citation :

java.lang.IndexOutOfBoundsException: No group 1
 java.util.regex.Matcher.group(Unknown Source)


 

Code :
  1. String[] keywordsTab = { "hello", "world" };
  2. String textStr = "Hello world ! this is my first program.";
  3. for (int i = 0; i < keywordsTab.length; i++) {
  4. Pattern p = Pattern.compile(keywordsTab[i],Pattern.CASE_INSENSITIVE);
  5. Matcher m = p.matcher(textStr);
  6. //m.replaceAll("_"+keywordsTab[i]+"_" );
  7. StringBuffer sb = new StringBuffer();
  8. for (int tmp = 1; m.find(); tmp++) {
  9.  m.appendReplacement(sb, "_"+m.group(tmp)+"_" );
  10. }
  11. m.appendTail(sb);
  12. }
  13. System.out.println(sb.toString());


 
si vous avez une idée je suis preneur :)
 
edit: le code en commentaire fonctionne mais je ne peux pas récuperer ce qui a été matché :/


Message édité par lint le 05-08-2004 à 13:33:44

---------------
\@/
mood
Publicité
Posté le 05-08-2004 à 11:58:18  profilanswer
 

n°815738
Jubijub
Parce que je le VD bien
Posté le 05-08-2004 à 12:01:35  profilanswer
 

poste plus de code (la regexp, la déclaration du tableau, etc...)


---------------
Jubi Photos : Flickr - 500px
n°815830
lint
O_O
Posté le 05-08-2004 à 13:34:58  profilanswer
 

édité, je vois pas trop ce que je pourrais mettre de plus :/


---------------
\@/
n°815834
Jubijub
Parce que je le VD bien
Posté le 05-08-2004 à 13:42:29  profilanswer
 

essaye ca :

Code :
  1. Pattern p = Pattern.compile(keywordsTab[i]+ "",Pattern.CASE_INSENSITIVE);

pour tester
 
et regarde si le matcher renvoie qqc


Message édité par Jubijub le 05-08-2004 à 13:43:01

---------------
Jubi Photos : Flickr - 500px
n°815858
lint
O_O
Posté le 05-08-2004 à 13:53:26  profilanswer
 

ca change rien :/

Citation :

m.groupCount() = 0


---------------
\@/
n°815867
Jubijub
Parce que je le VD bien
Posté le 05-08-2004 à 13:57:47  profilanswer
 

moi g ça comme output :  

Code :
  1. _Hello_ world ! this is my first program.
  2. Hello _world_ ! this is my first program.


 
je crois que ta boulette est là :  

Code :
  1. public class Test {
  2.     public static void main(String[] args) {
  3.         String[] keywordsTab = { "hello", "world" };
  4.         String textStr = "Hello world ! this is my first program.";
  5.        
  6.         for (int i = 0; i < keywordsTab.length; i++) {
  7.            Pattern p = Pattern.compile(keywordsTab[i],Pattern.CASE_INSENSITIVE);
  8.            Matcher m = p.matcher(textStr);
  9.            
  10.            //m.replaceAll("_"+keywordsTab[i]+"_" );
  11.            StringBuffer sb = new StringBuffer();
  12.            for (int tmp = 0; m.find(); tmp++) {
  13.               m.appendReplacement(sb, "_"+m.group(tmp)+"_" );
  14.            }
  15.            m.appendTail(sb);
  16.            System.out.println(sb.toString());
  17.         }
  18.        
  19.        
  20.     }
  21. }


 
g tjs le count à 0, mais ca replace qd même


Message édité par Jubijub le 05-08-2004 à 14:00:04

---------------
Jubi Photos : Flickr - 500px
n°815882
lint
O_O
Posté le 05-08-2004 à 14:06:05  profilanswer
 

okay je viens de comprendre
 

Citation :

Capturing groups are indexed from left to right, starting at one. Group zero denotes the entire pattern, so the expression m.group(0) is equivalent to m.group().


http://java.sun.com/j2se/1.4.2/doc [...] group(int)
 
je pensais devoir eviter group(0) mais en fait c'est justement ce que je voulais
 
merci :jap:


---------------
\@/
n°815885
Jubijub
Parce que je le VD bien
Posté le 05-08-2004 à 14:07:00  profilanswer
 

public class Test {
 
    public static void main(String[] args) {
        String[] keywordsTab = { "hello", "world" };
        String textStr = "Hello world ! this is my first program.";
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < keywordsTab.length; i++) {
           Pattern p = Pattern.compile(keywordsTab[i],Pattern.CASE_INSENSITIVE);
           Matcher m = p.matcher(textStr);
           
             
           //m.replaceAll("_"+keywordsTab[i]+"_" );
           
           for (int tmp = 0; m.find(); tmp++) {
              m.appendReplacement(sb, "_"+m.group(tmp)+"_" );
              System.out.println(m.group());
           }
           m.appendTail(sb);
 
        }
        System.out.println(sb.toString());      
    }
}
 
ca ca marche ...lol ben c bon t'a trouvé...


---------------
Jubi Photos : Flickr - 500px
n°815890
lint
O_O
Posté le 05-08-2004 à 14:09:12  profilanswer
 

nan en fait spa vraiment ca mais ca me fait déjà pas mal avancer :D
merci


---------------
\@/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] regex, pattern, matcher et group sont dans un bateau

 

Sujets relatifs
Bouquins references pour debuter en JAVA[JAVA] Lister les fichiers d'un répertoire d'un JAR
[JAVA] supprimer les caractères spéciaux dans une chaineregex --> help!
[JAVA] Base de données orientée objet & OZONEgérer [code][/code] avec une regex
[C++] Porter du Java en C++[Java][PHP][SQL] Debutant: Par quoi commencer??
[java][mysql] probleme de connection 
Plus de sujets relatifs à : [JAVA] regex, pattern, matcher et group sont dans un bateau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR