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

Collection et Stream Java Discussion :

[Regexp] String.matches


Sujet :

Collection et Stream Java

  1. #1
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut [Regexp] String.matches
    Bonjour a tout le monde.
    J'ai un probleme avec la methode matches(String regex). Voila un petit test que j'ai fait et qui m'a demontre que cette methode ne donne pas les resultats volus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    package dev;
     
    public class MatchesTester {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		final String chaine = "Programmation en Java";
    		final String regexp = "a";
     
    		if (chaine.matches(regexp)) {
    			System.out.println("Le motif est trouve.");
    		} else {
    			System.out.println("Le motif n'est pas trouve.");
    		}
    	}
    }
    Ici je dois avoir comme resultat une affichage de "Le motif est trouve." sur la console mais ... c'est pas le cas
    Est-ce qu'il y a quelqu'un qui m'aide ? Juste preciser une chose j'utilise la version 1.4.2_09 de java
    Even the biggest journey, starts with a single step.

  2. #2
    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,

    matches() permet de vérifier qu'une chaine correspond à un pattern. Dans ton cas le pattern est "un seul a et rien d'autre" donc c'est normal...

    Il faut que tu précises qu'il peut y avoir des lettres avant et après le a :
    Quoi que dans ton cas il vaut peut-être mieux utiliser indexOf()...

    a++

  3. #3
    Membre actif Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 253
    Points
    253
    Par défaut
    Dans la classe Pattern sont listées toutes les expressions régulières que l'on peut employer

  4. #4
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    adiGuba je t'en prie ne me dis pas que la chaine "a" n'est pas une expression reguliere ! Je viend de Perl et je peux te dire que je metrise assez bien les regexps
    Tu peux voir que c'est une regexp 100% meme dans la classe Pattern que xxaragornxx a donne le lien.

    Est-ce que vous pouvez me donner la versione de java que vous utilisez.
    Merci
    Even the biggest journey, starts with a single step.

  5. #5
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    Voila le code en Perl.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/usr/bin/perl
     
    $chaine = "Programmation en Java";
    $re = "a";
     
    if( $chaine =~ $re){
      print "Le motif est trouve.\n";
    } else {
      print "Le motif n'est pas trouve.\n";
    }
     
    exit 0;
    Ca marche nickel. Pourquoi en Java ca ne marche pas ?
    Even the biggest journey, starts with a single step.

  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
    Citation Envoyé par scifire
    adiGuba je t'en prie ne me dis pas que la chaine "a" n'est pas une expression reguliere ! Je viend de Perl et je peux te dire que je metrise assez bien les regexps
    Je n'ai pas dit que ce n'était pas une expression régulière, mais qu'utiliser avec matches() cela correspond à vérifier que la chaine est égal à "a"...


    matches() ne sert pas à rechercher un pattern mais à vérifier que la chaine correspond exactement au pattern. Dans ton cas ton pattern "a" est équivalent à "^a$" si tu préfères...

    matches() est utilisé pour vérifier qu'une chaine correspond bien à un pattern donné, par exemple qu'une adresse mail soit bien formé...


    Or il semble que tu veuilles vérifier la présence d'un caractère dans la chaine, et dans ce cas indexOf() est plus approrpié et cela évite d'utiliser les regexps...

    Maintenant, si ton but est au final de rechercher une sous-chaine selon un pattern complexe, alors il ne faut pas utiliser matches() mais la méthode find() de la classe Matcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Matcher matcher = Pattern.compile(regexp).matcher(chaine);
    while ( matcher.find() ) {
          System.out.println("trouvé : " + matcher.group() );
    }
    http://javasearch.developpez.com/j2s...x/Matcher.html

    a++

  7. #7
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    Citation Envoyé par adiGuba
    matches() ne sert pas à rechercher un pattern mais à vérifier que la chaine correspond exactement au pattern. Dans ton cas ton pattern "a" est équivalent à "^a$" si tu préfères...
    adiGuba je te remercie c'est exactement ce que j'ai volu savoir.
    Even the biggest journey, starts with a single step.

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

Discussions similaires

  1. [RegExp] RegExp.test(String) ou String.match(RegExp)
    Par Eric2a dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/09/2010, 00h42
  2. [RegExp] pattern matching adapté
    Par thierry_b dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 06/07/2009, 18h13
  3. Réponses: 1
    Dernier message: 04/05/2009, 11h08
  4. [RegExp] string.match() difficile
    Par PaC_1250 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/05/2007, 13h24
  5. Type unit, type string, match with
    Par lioudow dans le forum Caml
    Réponses: 8
    Dernier message: 12/02/2007, 17h12

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