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 :

[String][replaceAll][Expression régulière]Remplacement multi


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Par défaut [String][replaceAll][Expression régulière]Remplacement multi
    Salut à tous

    J'ai besoin de transformer des sous-chaînes de caractères à l'intérieur d'une chaîne de caractères. Pour ce faire, j'utilise la méthode replaceAll de notre chère classe String. Le 1er paramètre de la méthode doit être la chaîne cherchée sous forme d'une expression régulière et le 2ème paramètre, la chaîne de remplacement, 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
     
    String str = "Hello world ! (cpr)";
     
    System.out.println( str.replaceAll( "world", "monde" ) );
    // 1er cas, aucun problème particulier, cela nous donne :
    // Hello monde ! (cpr)
     
    // 2ème cas, plus complexe, je voudrais transformer (cpr) et -cpr-
     
    String str2;
    str2 = str.replaceAll( "\\(", "-" ) );
    // !!! expression régulière, ( est un caractère spécial, donc pour l'utiliser
    // comme un caractère normal il faut le faire précéder d'un antislash,
    // soi 2 dans une chaîne de caractère bien-sûr
     
    str2 = str2.replaceAll( "\\)", "-" ) );
    // même remarque que précédemment pour le caractère )
    // ce qui nous donne au final :
    // Hello world ! -cpr-
    Ma question est, puis-je rassembler les 2 dernières étapes en une seule ? Effectivement, les parenthèses ouvrantes et fermantes sont remplacées par la même chaîne de caractères. Ce doit être possible avec les expressions régulières, j'imagine quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    str2 = str.replaceAll( "[\\(][\\)]", "-" );
    Et peut-on également spécifier que l'on ne veut pas tenir compte de la casse (ignore case) ?

    Par avance merci.

    Bon week-end et joyeuse pâques

    -David-

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Par défaut
    Alors je pense que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    str.replaceAll("\\(cpr\\))","-cpr-")
    Mais j'imagine que c une bidouille que tu voudrais eviter alors peut etre que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    str.replaceAll("[\\(\\)]","-")
    devrais marché mais j'ai pas essayé alors !!!!!!!

  3. #3
    Membre averti
    Inscrit en
    Février 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 27
    Par défaut
    salut

    j'ai pas bien compris ton histoire de casse à ne pas tenir compte... mais si tu veux remplacer tesparentheses en une seule fois, tu peux faire un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maString.replaceAll( "[\\(\\)]" , "chaine remplaçante"  )
    les caracteres entre corchets sont pris individuellement: comme des "ou". donc si tu rencontres un caractere '(' ou un caractere ')', tu remplaces par ta chaine remplaçante.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Par défaut
    Salut FreshVic,

    Effectivement, ta 1ère solution est évidente, mais tu penses bien que ce n'est pas cela que j'attendais, il s'agissait juste d'un exemple.

    Ta 2ème solution fonctionne nickel, mais le cas était peut-être trop simple puisqu'il s'agit d'un caractère pour chaque parenthèse. Je vais expliqué un peu plus en détail ou je veux en venir. J'ai besoin de transformer des chaînes de caractères pour obtenir des images smiley, exemples :

    le message :
    Hello ; - ) ou ; ) // j'ai mis des espaces pour ke le forum ne les transforme pas en images

    ce qui doit me donner :

    <p>Hello <img src="img/smiley/clindoeil.gif"> ou <img src="img/smiley/clindoeil.gif">

    l'interprétation est la même pour les 2 smileys.

    Pour info, l'affichage se fait dans un JEditorPane, d'où le code html. Pour l'instant je suis obligé de faire plusieurs passages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    str = mess.replaceAll( ";-\\)", "<img src=\"img/smiley/clindoeil.gif">\" );
    str = str.replaceAll( ";\\)", "<img src=\"img/smiley/clindoeil.gif">\" );
    Comment faire en une seule fois ? J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    str = mess.replaceAll( "[;-\\)][;\\)]", "<img src=\"img/smiley/clindoeil.gif">\" );
    sans succès...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Par défaut
    Merci également à fredericL, mais même remarque, comment faire quand il s'agit de chaînes de plusieurs caractères et non un seul ?

    Pour ta question au sujet de la casse, si je te donne ce qui suit en exemple, je pense que tu comprendras :

    :O et : o doivent être remplacé par la même chaine de caractères <img src="img/smiley/surpris.gif">

  6. #6
    Membre averti
    Inscrit en
    Février 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 27
    Par défaut
    non , il faut que tu fasses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maString.replaceAll("((; - \\))|(; \\)))","urlSmiley")
    avec ça tu cree deux groupes (avec les vraies parentheses)
    (même histroie, j'ai mis des espaces pour que le forum ne mette pas de smiley)[/code]

    pour la casse, tu n'as qu'a faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maString.toLowerCase().replaceAll("((; - \\))|(; \\)))","urlSmiley")
    ou bien .toUpperCase(), c'est pareil

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Par défaut
    Merci pour ta réponse, je vais essayer ça de suite !!! Par contre pour la casse, ça va pas le faire comme ça, car je ne veux pas passer tout le message en minuscules, tu comprend ?

    Dis donc, ça fait plaisir d'avoir une réponse d'un rennais, j'ai vécu près de 30 ans à Rennes, Pacé plus exactement...

    A+

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Par défaut
    Bon, en fouillant un peu j'ai trouvé pas mal de chose intéressante, entre autre chez microsoft (et oui, tout arrive ) sur msdn.

    Juste un exemple pour ceux que cela intéresse,
    l'expression régulière suivante :
    :-{0,1}[Jj]
    fait correspondre :
    aussi bien :-J que :J (le -{0,1} signifie de 0 à 1 caractère '-')
    ou encore :-J ou encore :-j (le [Jj] signifie J ou j)
    et toutes les autres combinaisons, :J, :j...

    Encore merci à tous et à bienôt...

    -cpr0-

  9. #9
    Membre averti
    Inscrit en
    Février 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 27
    Par défaut
    pour le coup du 0 ou 1, tu as le caractere '?':


  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Par défaut
    Effectivement, je vois que j'ai à faire à un spécialiste des expressions régulières. Aujourd'hui j'aurai appris pas mal sur ce sujet. Encore merci Frédéric et je ne te demanderai pas de saluer Rennes pour moi, je vais le faire moi même puisque j'y descends ce soir pour un long week-end bien chargé ...

    Bye,

    -David-

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

Discussions similaires

  1. Convertir un String en expression régulière
    Par GérardMartinelli dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2010, 11h20
  2. Réponses: 0
    Dernier message: 24/11/2009, 09h20
  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. Réponses: 4
    Dernier message: 25/07/2006, 17h37

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