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 :

[String] ReplaceAll et ponctuation


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 131
    Points : 82
    Points
    82
    Par défaut [String] ReplaceAll et ponctuation
    Bonjour,

    Mon but est de rajouter un backslash devant chaque single ou double quotte de ma chaine de caractères (pour des raisons de SQL et ce n'est pas la peine de me parler de PreparedStatement, ça ne fonctionne pas... c'est une très longue histoire qu'on peut trouver à l'endroit adéquate du forum. Depuis je veux gérer mes query moi-même. Après tout rien ne l'interdit ).

    Ma première idée était de remplacer les ' ou les " par des \' ou des \" grâce à la méthode replaceAll. J'ai donc pris ma documentation et testé tout ça. J'aimerai utiliser le pattern \p{Punct} mais celui-ci ne différencie pas les différentes ponctuations, ou je me trompe ?

    Ayant quand même des difficultés avec l'expression régulière, j'ai essayé un test simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String text="mon texte est pour l'instant un test"
    text.replaceAll("test", "AAA");
    Si je trouve le mot test, je le remplace par un triple A majuscule. et... il ne se passe rien. Je suis tout de même un peu surprise...

    Pourriez-vous m'aider s'il vous plait à comprendre pourquoi mon replaceAll ne fonctionne pas ? C'est pour le principe, même si je pourrais surement trouver une autre solution.

    Pourriez-vous aussi m'expliquer le fonctionnement du pattern des ponctuations, s'il vous plait ?

    et à la rigueur (si vous avez du temps) à régler mon problème de quotte, mais je ne suis pas intervenue pour ça.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    En fait, le resultat est dans le retour de la methode. D'une maniere générale, tu ne peux pas modifier un objet de type String. Toutes les methodes qui transforment une String retournent toujours le resultat dans une nouvelle String.

    Pour voir le resultat, tu dois ecrire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String text="mon texte est pour l'instant un test"
    String result = text.replaceAll("test", "AAA");
    Voila voila

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 131
    Points : 82
    Points
    82
    Par défaut
    merci beaucoup Sanguko.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Mascotte
    Si je trouve le mot test, je le remplace par un triple A majuscule. et... il ne se passe rien. Je suis tout de même un peu surprise...
    Les String sont immuable ! Toutes les méthodes qui les modifient renvoient une nouvelle instance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    text = text.replaceAll("test", "AAA");
    Citation Envoyé par Mascotte
    Pourriez-vous aussi m'expliquer le fonctionnement du pattern des ponctuations, s'il vous plait ?
    Javadoc de Pattern :
    \p{Punct} Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
    Citation Envoyé par Mascotte
    et à la rigueur (si vous avez du temps) à régler mon problème de quotte, mais je ne suis pas intervenue pour ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    text = text.replaceAll("('|\")", "\\\\$1");
    cf



    Mais cela ne règlera pas complètement ton problème, puisqu'il peut y avoir d'autres caractères qui seront interprété différemment par ta BD (et cela peut même varier selon la BD si je ne me trompe pas).

    Il serait nettement préférable d'utiliser les PreparedStatement... qui devrait fonctionner correctement si le driver JDBC respectent bien les spécification JDBC...

    a++

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 131
    Points : 82
    Points
    82
    Par défaut
    [edit de adiGuba] désolé j'ai éditer ton message au lieu de répondre !!!

    Et j'ai perdu ton message

    Essaye de le rééditer

    dommage, tant pis.

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Je n'ai jamais rencontré de soucis avec les driver MySQL et les PreparedStatement...

    Citation Envoyé par adiGuba
    Par contre avec cette version anti-diluvienne du driver, mes accents ne sont pas pris en compte... C'est un vrai problème.
    Surement parce que par défaut MySQL doit utiliser de l'ASCII...

    tu dois utiliser les propriétées useUnicode et characterEncoding dans ton URL de connection à la base afin de spécifier l'encodage de ton choix...

    http://www.developpez.net/forums/showthread.php?t=24495


    a++

    [edit] désolé je me suis trompé j'ai édité ton message

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 131
    Points : 82
    Points
    82
    Par défaut
    merci, je vais regarder ça au calme.

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

Discussions similaires

  1. probleme avec string.replaceall(" ", "/")
    Par danou07200 dans le forum Débuter
    Réponses: 3
    Dernier message: 21/11/2008, 23h31
  2. Probleme String replaceAll
    Par viscere dans le forum Langage
    Réponses: 13
    Dernier message: 03/07/2006, 09h22
  3. [String] [ReplaceAll] comment despecialiser ?
    Par DeeJimy dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 12/08/2005, 16h07
  4. [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
  5. [regex][string] replaceAll bogué ?
    Par 7eme dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/11/2003, 16h36

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