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 :

[ StringBuilder ] [ String ] la méthode replaceAll() ne fonctionne pas


Sujet :

Langage Java

  1. #1
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut [ StringBuilder ] [ String ] la méthode replaceAll() ne fonctionne pas
    Bonjour à tous,

    Je construis un objet json contenant une liste de commentaires.
    Cette liste est utilsée dans du code javascript.

    Comme ceetains caractères contiennent de simples quotes, celà pose problème lors de l'interprétation du code js.

    Du coup, au moment de la construction de mon json, je veux remplacer les "'" par "\\'" comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    StringBuilder cmt = new StringBuilder("");
    ...
    String cmtStr = cmt.toString();
    cmtStr.replaceAll("'", "\\'");
    cmt = new StringBuilder(cmtStr);
    Pourquoi la méthode replaceAll ne fonctionne pas?
    Des idées?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    tu as peut-être entendu parler d'un truc barbare comme quoi les objets String sont "immutables", et jusqu'à maintenant tu ne t'es peut-être pas demandé ce que ça veut dire.

    Ça veut dire qu'on ne peut pas changer le contenu d'une String. Une fois qu'un objet String est construit, il reste tel qu'il est et son contenu restera le même jusqu'à sa mort.

    Par conséquent, appeler replaceAll() sur une String, ou quoi que ce soit d'autre d'ailleurs, ne modifie rien du tout à cette String. A quoi cela peut-il donc bien servir d'avoir une telle méthode alors ? Eh bien, cette méthode construit simplement une autre String, toute neuve, dont le contenu est le même que la précédente, mais avec les remplacements demandés.

    Il faut donc faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmtStr = cmtStr.replaceAll("'", "\\'");
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    La méthode replaceAll(a,b) fonctionne très bien, conformément à ce qu'en dit la doc : a est une expression régulière, et b une expression (syntaxe particulière) ou $ et \ ont un sens particulier (donc qu'il faut échapper le \ pour qu'il ait le sens littéral que tu veux).

    Il faudrait donc écrire : cmtStr=cmtStr.replaceAll("'", "\\\\'");, pour obtenir, à partir de "test'test", "test\'test".

    Remarque qu'il existe une méthode replace(String, String) qui permet de remplacer toutes les occurrences de la première String par la seconde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmtStr=cmtStr.replace("'", "\\'");
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut
    Merci pour vos réponses.

    @thelvin

    cmtStr = cmtStr.replaceAll("'", "\\'");
    T'as raison, il fallait que je récupère le nouveau String. Par contre, remplacer la "'" par "\\'" ne change rien.

    @joel.drigo

    cmtStr=cmtStr.replaceAll("'", "\\\\'");
    Oui il fallait mettre "\\\\'", ça marche, ça ne casse plus mon json. Mais le commentaire affiché dans la textarea est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    \'commentaire\' de test
    Il faut que je reformate côté js pour pouvoir afficher correctement le commentaire dans le champ texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'commentaire' de test

  5. #5
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut
    Je retire ce que j'ai dit par rapport au reformatage côté js, l'utilisation de "\\\\'" marche correctement

    Merci !!

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par JQueen Voir le message
    T'as raison, il fallait que je récupère le nouveau String. Par contre, remplacer la "'" par "\\'" ne change rien.
    Oui. Comme un problème m'a sauté aux yeux, j'ai oublié de regarder s'il y en avait d'autres. J'essaie pourtant d'éviter ça.

    Bref, je me suis planté, mais heureusement joel l'a vu, lui .
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/08/2010, 11h45
  2. [XL-2003] Méthode Copy ne fonctionne pas
    Par sagitarium dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/09/2009, 13h58
  3. Méthode objet ne fonctionne pas (4D 2003)
    Par Jimmy Jazz dans le forum 4D
    Réponses: 7
    Dernier message: 18/09/2009, 14h03
  4. Ma méthode ajouter ne fonctionne pas
    Par beegees dans le forum C++
    Réponses: 6
    Dernier message: 14/05/2008, 15h50
  5. méthode OfType() ne fonctionne pas
    Par maa dans le forum C#
    Réponses: 7
    Dernier message: 21/01/2008, 09h12

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