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 :

Convertir un String en expression régulière


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut Convertir un String en expression régulière
    Bonjour,

    J'ai un petit problème avec la methode replaceAll(A,B) de la classe String.
    En effet si j'ai un caractère spécial par exemple un signe + dans A, j'ai une exception qui se lève (Pattern Exception).
    Pour être plus clair voici un exemple :

    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
     
     /**   Translate a substring (inmask) to another substring (outmask)  
     
         Syntax   :  Translate(phrase, intmask, outmask)
         Fonction :  Remplacer chaque caractère de inmask par le caractère correspondant de outmask
         
    */
    public static String Translate(String phrase, String inmask, String outmask)
    {
        if (isEmpty(inmask) || isEmpty(outmask) || isEmpty(phrase)) return phrase;
        char[] in = inmask.toCharArray();
        char[] out = outmask.toCharArray();
        if (in.length != out.length)  return phrase; // on ne fait rien si pas égal 
        for (int i=0; i< in.length ; i++) phrase = phrase.replaceAll(""+in[i] ,""+out[i]);
     
        return phrase; 
    }
     
    public static boolean isEmpty(String s)
    {
    	if (s == null) return true;
    	if (s.equals("null")) return true;
    	if ( s.trim().length()==0)  return true;     
    	return  false;
    }
    Cela marche très bien, sauf si par hasard il y a un caractère spécial dans inmask (par exemple un signe +). Dans ce cas il faudrait utiliser à la place "\\+"

    Bien sûr je pourrais faire une double boucle pour rechercher les occurrences de chaque caractère, mais j'avais trouvé plus simple et plus rapide d'utiliser replaceAll.
    Y-a-t-il un moyen (une classe ou une méthode) de transformer un String en une expression régulière ?

    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    En fait j'ai trouvé une solution pour ma méthode, c'est de remplacer
    phrase.replaceAll(""+in[i] ,""+out[i]);
    simplement par
    phrase.replace( in[i] , out[i]);

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Ce traitement est assez coûteux : boucle for + String.replaceAll
    En effet, à chaque passage dans la boucle for, String.replaceAll recrée une copie de la chaine de caractère ...

    Je vous conseille de regarder du côté des StringBuffer.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/04/2010, 21h34
  2. Expressions régulières sur String
    Par dadouuuu dans le forum Débuter
    Réponses: 4
    Dernier message: 07/05/2009, 18h28
  3. Recherche de string avec expression régulière ?
    Par sbadecoder dans le forum Langage
    Réponses: 0
    Dernier message: 21/01/2008, 19h44
  4. Génération d'un String à partir d'une expression régulière
    Par yang dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/03/2007, 14h21
  5. [String][replaceAll][Expression régulière]Remplacement multi
    Par cpr0 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 09/04/2004, 16h40

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