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

avec Java Discussion :

Remplacer un caractère par une expression régulière dans une chaîne


Sujet :

avec Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Par défaut Remplacer un caractère par une expression régulière dans une chaîne
    Bonsoir à tous et toutes,

    J'ai rencontré un problème cet après-midi. Je vous l'explique :

    J'ai un fichier dont je récupère le nom et l'extension. L'extension contient un '?' qui signifie que ce caractère peut-être une quelconque lettre de l'alphabet. Je dois donc la remplacer par une lettre pour pouvoir ensuite la comparer à une autre extension de fichier.

    J'avais pensé à une expression régulière : [a-zA-Z] mais ensuite pour remplacer le '?' je ne sais pas comment procéder.

    Je pense qu'il faut utiliser la méthode replaceAll(String str1, String str2) mais je ne sais pas comment mettre cette expression régulière.

    replaceAll("?",...) Je ne sais pas comment mettre cette expression dans l'appel de la méthode.

    Pour la suite, je compare l'extension récupérée grâce à replaceAll avec une autre.
    Par exemple, j'ai l'extension "?xt", je la remplace par "[a-zA-Z]xt" et je la compare à l'autre extension (txt par exemple).

    Voilà, j'espère avoir été assez clair et je vous remercie d'avance pour votre aide.

    Bonne soirée.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    replaceAll("\\?","[a-zA-Z]"); ou replaceAll("\\?","\\w");

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    replaceAll("\\?","[a-zA-Z]")

    Par contre, pas d'accord pour replaceAll("\\?","\\w").
    D'une part,ca accepte aussi les chiffres -> [a-zA-Z_0-9]
    D'autre part, avec String.replaceAll(String regex, String replacement ) les \ dans la chaine de remplacement sont à utiliser avec précaution: ils sont interprétés comme une séquence d'échappement de litéral de char: donc ca remplacera les char ? par des char w tout court au lieu de la chaine \\w.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Par défaut
    Bonjour,

    Merci pour vos réponses mais il n'y a apparemment pas la bonne solution.

    Lorsque je fais replaceAll("\\?","[a-zA-Z]") : j'obtiens "[a-zA-Z]xt" comme extension alors que je veux juste une lettre quelconque.
    Pour le \\w, j'ai testé et j'obtiens juste un w.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    une seule lettre? Ton message semblait dire que tu voulais une expression rationnelle pour pouvoir comparer si ?xt peut s'appliquer à txt .... Tu peux préciser ton problème dans ce ca?

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Par défaut
    En fait j'ai un filtre d'extension qui est ".?xt"

    Je cherche tous les fichiers dont l'extension est ".?xt" dans un dossier. Et le '?' peut représenter n'importe quelle lettre.

    Par exemple si j'ai ".txt" ou ".ext" c'est bon, sinon ce n'est pas bon.

    Je pensais remplacer le filtre en remplacant le '?' par cette expression...

    Edit : En fait, je pense que c'est ce que je veux, mais quand je compare à l'autre extension, ça compare "[a-zA-Z]xt" avec "txt", ce qui n'est pas bon alors que ça devrait. J'utilise la méthode compareToIngoreCase, peut-être que ce n'est pas la bonne solution...

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    C'est ça que tu cherche je pense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "txt".matches("[a-zA-Z]xt");

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Par défaut
    Oui c'est ça !

    Il fallait bien que je remplace ".?xt" par ".[a-zA-Z]xt" mais ensuite il ne faut pas utiliser la méthode compareTo mais matches.

    Merci beaucoup pour cette aide.

    Sujet résolu.

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Par défaut
    J'ai encore une question :

    Je ne veux plus remplacé le '?' uniquement par une lettre mais aussi par un chiffre ou n'importe quel autre caractère.

    J'ai remplacé la reg exp par [a-zA-Z_0-9] mais je ne sais pas comment prendre les autres caractères tels que '_' ; '@' ; '/' ; '%' ...

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Si tu veux n'importe quel caractère hormis les espaces, tu peux utiliser
    \S
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extensionEnCours.matches("\\Sxt");
    Maintenant le risque c'est que ca comprend tous les autres caractères : par exemple le char '.' est aussi valide.

    Sinon, je te conseille d'aller jeter un oeil à la javadoc des Pattern, t'auras pas mal de réponses à tes questions
    http://java.sun.com/j2se/1.4.2/docs/...x/Pattern.html

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Par défaut
    Merci pour le "\\S" mais attention à l'utilisation :

    Il faut rajouter deux \ pour avoir "\\\\S" sinon le backslash n'est pas pris en compte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Pattern pattern = Pattern.compile("\\?");
    Matcher matcher = pattern.matcher(sFiltre);
    sFiltre = matcher.replaceAll("\\\\S");
    ...
    if (extension.matches(sFiltre)) {
              //Traitement ...
    }
    J'étais sur la javadoc mais seulement sur la classe Matcher

    Merci pour votre collaboration

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Cool
    Sinon pourquoi est ce que tu passes par ce que tu appelles un fitre (à savoir le char '?') si c'est pour juste après le remplacer par \S ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Pattern pattern = Pattern.compile("\\?");
    Matcher matcher = pattern.matcher(sFiltre);
    sFiltre = matcher.replaceAll("\\\\S");
    ...
    if (extension.matches(sFiltre)) {
              //Traitement ...
    }
    Tu pourrais faire plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String extension = "txt"; // En dur pour l'exemple
    if (extension .matches("\\Sxt")){
              //Traitement ...
    }

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Par défaut
    Sinon pourquoi est ce que tu passes par ce que tu appelles un fitre (à savoir le char '?') si c'est pour juste après le remplacer par \S ??
    En fait je récupère plusieurs données dans un fichier de conf dont le nom et l'extension des fichiers à traiter.
    Avant le code que j'ai mis, je récupère l'extension qui est dans le fichier de conf et je vérifie si elle a un '?'. Si oui je le remplace par \\\\S sinon je la laisse telle quelle.
    Ensuite, je regarde d'autres fichiers et je compare leur extension et je la compare avec le filtre du fichier de conf. Si elles sont identiques, je réalise le traitement, sinon je passe au fichier suivant.

    Exemple :

    Dans le fichier de conf on a :
    ...
    Filtre_nom = "*"
    Filtre_extension = ".?dp"
    ...

    Là je mets dans sFiltre la valeur ".?dp"; comme il y a un '?', cela donne ".\Sdp".
    Je regarde ensuite dans un répertoire donné en paramètre dans le fichier de conf les fichiers présents. Si l'extension d'un fichier est ".edp" ou ".5dp" ou "._dp" je le prends, si c'est ".txt", je le laisse. Et je ne regarde pas le nom des fichiers puisque le filtre est à "*".
    Voilà, j'espère avoir été clair.
    Bonne continuation et à bientôt.

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    C'est très clair.
    Tu as une phase intermédiaire puisque le fichier de conf ne définit pas proprement dites la regex mais quelque chose (en l'occurrence la présence du ?) qui te permet à toi de créer la regex qui convient.

    Bonne continuation à toi aussi

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  2. Caractères spéciaux dans une expression régulière
    Par marcorel dans le forum Langage
    Réponses: 4
    Dernier message: 22/11/2008, 00h26
  3. Une date butoire dans une expression régulière
    Par zooffy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/02/2008, 10h11
  4. [RegEx] Utiliser une expression régulière dans une requête
    Par Tobleron dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2007, 19h00
  5. Réponses: 6
    Dernier message: 17/08/2005, 12h38

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