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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    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 émérite
    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
    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
    Invité
    Invité(e)
    Par défaut
    merci beaucoup Sanguko.

  4. #4
    Expert éminent
    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
    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
    Invité
    Invité(e)
    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.
    Dernière modification par Invité ; 01/03/2007 à 15h00.

  6. #6
    Expert éminent
    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
    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
    Invité
    Invité(e)
    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