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 :

Remplacer des caractères spéciaux dans une chaine


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 247
    Points : 78
    Points
    78
    Par défaut Remplacer des caractères spéciaux dans une chaine
    Bonjour, je reçois via le protocole http une chaine formatée en json dans mon appli.
    Seulement les caractère spéciaux comme {}"sont encodés par http en %22, %7B...
    Le sachant, j'aimerais remplacer ces caractères. J'utilise la fonction replace mais ça ne marche pas pour ces séquences de caractères alors que ça marche pour tous les autres.

    Quelqu'un aurait une idée ?

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour

    Cela ne pose aucun problème de remplacer %22 par un caractère !!

    Ton code serait le bien venu !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 247
    Points : 78
    Points
    78
    Par défaut
    le voila:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String fax = (String) this.getRequestAttributes().get("fax");
    fax.replaceAll("-"," ");
    autant pour moi, j'ai compris mon erreur. Etant donné que replaceAll() retourne une String, je dois affecter une variable de ce type pour la réuitiliser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String fax = (String) this.getRequestAttributes().get("fax");
    String fax_modif=fax.replaceAll("-"," ");

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Bon à savoir : une String ne peut pas être modifiée.

    Toute méthode de traitement de String doit donc obligatoirement en retourner une nouvelle, qui sera le résultat du traitement. La String d'origine ne sera pas modifiée, car on ne peut pas modifier une String.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Sinon, on peut utiliser StringBuffer qui est modifiable. (gain de perfs)
    Voir aussi StringBuilder (encore + rapide mais pas syncro /!\ aux erreurs)

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par Dont-x Voir le message
    Sinon, on peut utiliser StringBuffer qui est modifiable. (gain de perfs)
    Oui enfin, replaceAll() utilise déjà un StringBuffer, donc dans le cas présent, on ne peut pas dire qu'il y ait gain de perf. C'est bon à utiliser quand on construit soi-même la String.
    Enfin bon, le problème dont on nous parle là, devrait être résolu avec URLEncoder.encode() (qui s'en sert lui aussi.)

    Citation Envoyé par Dont-x Voir le message
    Voir aussi StringBuilder (encore + rapide mais pas syncro /!\ aux erreurs
    Les erreurs sont très peu probables. Il y a un risque si plusieurs threads doivent accéder en même temps au StringBuilder. Dans ce cas-là il vaut mieux synchroniser et utiliser un StringBuffer.
    Mais quand est-ce qu'on a plusieurs threads qui accèdent à ça ? En réalité on ne programme jamais ça.

    replaceAll() utilise StringBuffer parce qu'il est basé sur Matcher. Matcher ne devrait pas utiliser StringBuffer vu qu'on ne devrait pas s'en servir avec plusieurs threads. Mais il date de l'époque où StringBuilder n'existait pas et seul StringBuffer existait. Aujourd'hui, il est trop tard pour changer, car il existe peut-être des programmes qui comptent sur le fait que Matcher utilise StringBuffer. Si StringBuilder avait existé dès le début, ce serait lui.

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

Discussions similaires

  1. Remplacer caractères spéciaux dans une chaine
    Par Peyothe dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/08/2009, 13h32
  2. Réponses: 9
    Dernier message: 31/07/2007, 01h13
  3. Récuperer des caractères Majuscules dans une chaine
    Par Loïc59 dans le forum Général VBA
    Réponses: 3
    Dernier message: 17/05/2007, 00h14
  4. Réponses: 2
    Dernier message: 14/03/2007, 10h31
  5. [RegEx] caractère spéciaux dans une chaine
    Par BigBarbare dans le forum Langage
    Réponses: 3
    Dernier message: 12/04/2006, 11h53

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