Modification code

Résolu
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 18 août 2007 à 18:00
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 20 août 2007 à 11:52
Bonjour à tous.
j'ai trouvé, sur internet, une méthode permettant de trouver un mot présent dans une phrase (ici, un texte relativement long).
je ne parviens pas à modifier le code pour qu'il puisse trouver un mot avec, à la suite de ce mot, une suite de chiffres non défini et "ilimité". c'est à dire que pour le moment le code me permet de trouver "qqc" dans un texte et je veux qu'il puisse trouver "qqc1" ou encore "qq123..1" par exemple.

voici le code.

  String content = "";
  try {
   Document d = editorPane.getDocument();
   content = d.getText(0, d.getLength()).toLowerCase();
  } catch (BadLocationException e) {
   // Cannot happen
   return -1;
  }
  
  word = word.toLowerCase();
  int lastIndex = 0;
  int wordSize = word.length();
  
  while ((lastIndex = content.indexOf(word, lastIndex)) != -1) {
   int endIndex = lastIndex + wordSize;
   try {
    //Souligne le mot trouvé
    highlighter.addHighlight(lastIndex, endIndex, painter);
   } catch (BadLocationException e) {
   }
   if (firstOffset == -1) {
    firstOffset = lastIndex;
   }
   lastIndex = endIndex;
  }

merci.

4 réponses

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
20 août 2007 à 11:52
Bonjour a tous.

j'ai finalement trouvé un compris.
voila le code (si ca interresse certain):

public void analyser () {
  
  //Les commandes et les couleurs qui leurs sont attribuées
  Color[] couleurs = {new Color(195, 0, 195), new Color(195, 0, 195), new Color(195, 0, 195), new Color(195, 0, 195), new Color(195, 0, 195), new Color(195, 0, 195), new Color(195, 0, 195), new Color(195, 0, 195), new Color(195, 0, 195), new Color(195, 0, 195), new Color(105, 130, 235), new Color(255, 255, 0), new Color(255, 255, 0), new Color(145, 70, 0), new Color(255, 70, 70), new Color(255, 150, 40)};
  String[] commandes = {"X", "Y", "Z", "A", "B", "C", "I", "J", "K", "R", "M", "F", "S", "T", "G", "%"};
  
  
  //On passe chaque commande en revu
  for (int a=0; a<commandes.length; a++) {
   
   //La commande en cours
   String cmd = commandes[a];
   //La couleur qui correspond à la commande
   Color couleur = couleurs[a];
   
   //Dernière positon valide
   int lastIndex = 0;
   
   //On cherche dans le texte tous les endroits où il y a la valeur contenu par cmd
   while ((lastIndex = this.getText().indexOf(cmd, lastIndex))!= -1) {
    
    //Fin du mot (de la commande)
    int endIndex = lastIndex + 1;
    
    //Pour savoir si la commande est correcte
    boolean valide = false;
    
    //Suivant le type de commande la valeur numérique n'est pas la même    // (> 9 Nombre entier) (< 9 Nombre décimale)
    if (a > 9) {
     
     //Tant qu'il y a des chiffres
     boolean ok = true;
     while (ok) {
      
      //Si c'est un chiffre      if ((this.getText().charAt(endIndex + 1) '0') || (this.getText().charAt(endIndex + 1) '1') || (this.getText().charAt(endIndex + 1) == '2') || (this.getText().charAt(endIndex + 1) == '3') || (this.getText().charAt(endIndex + 1) == '4') || (this.getText().charAt(endIndex + 1) == '5') || (this.getText().charAt(endIndex + 1) == '6') || (this.getText().charAt(endIndex + 1) == '7') || (this.getText().charAt(endIndex + 1) == '8') || (this.getText().charAt(endIndex + 1) == '9')) {
       
       //On actualise les variables
       endIndex ++;
       valide = true;
       
      }else{
       
       //Si non, on quitte la boucle
       ok = false;
       
      }
      
     }
     
    }else{
     
     //Pour savoir si on a déja eu un "."
     boolean virgule = false;
     
     //Tant qu'il y a des chiffres
     boolean ok = true;
     while (ok) {
      
      //Si c'est un chiffre      if ((this.getText().charAt(endIndex + 1) '0') || (this.getText().charAt(endIndex + 1) '1') || (this.getText().charAt(endIndex + 1) == '2') || (this.getText().charAt(endIndex + 1) == '3') || (this.getText().charAt(endIndex + 1) == '4') || (this.getText().charAt(endIndex + 1) == '5') || (this.getText().charAt(endIndex + 1) == '6') || (this.getText().charAt(endIndex + 1) == '7') || (this.getText().charAt(endIndex + 1) == '8') || (this.getText().charAt(endIndex + 1) == '9')) {
       
       //On actualise les variables
       endIndex ++;
       valide = true;
       
      }else if ((this.getText().charAt(endIndex + 1) == '.') && !virgule && valide) {
       
       //On actualise la variable
       endIndex ++;
       
      }else{
       
       //Si non, on quitte la boucle
       ok = false;
       
      }
      
     }
     
    }
    
    
    //Si la commande est valide, on la colore
    if (valide) {
     
     //On colore la commande
     
    }

   lastIndex = endIndex;
    
   }
   
  }
  
 }

le code fonctionne, il ne me reste que quelques modifs à faire (detetcté une commande même quand l'argument est un chiffre car tant qu'il n'y a pas denombre, ca ne colore rien).
3
amundain Messages postés 110 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 28 août 2012 1
18 août 2007 à 18:18
Salut,

Il existe une méthode startsWith(), il me semble, dans la classe String, peut-être peux-tu paraméter ton code pour qu'il trouve le mot commençant par ce que tu cherches, et qu'il calcule la longuer de mot à partir de ça ?

A +,

amundain

<hr size="2" width="100%" />Java bien,merci.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 août 2007 à 19:26
Hum, il me semble qu'on t'a déjà dit de regarder du côté des expressions régulières... alors pourquoi tu ne creuse pas cette piste et tu t'obstine à poser les mêmes questions ?
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
18 août 2007 à 22:25
Bonsoir.
c'est pas que je m'obstine sur une autre piste mais je n'arrive pas à utiliser les regexp (du moins à récupéré et colorer la chaine trouvée). Si vous êtes d'accord pour m'expliquer, il n'y a pas de problème. En attendant, il y a aussi cette solution qui colorie "directement" le texte.

merci.
0
Rejoignez-nous