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 :

Tester si une chaine comporte des alphanumériques


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 108
    Par défaut Tester si une chaine comporte des alphanumériques
    Bonjour à tous,

    Voila mon soucis:

    Je voudrais savoir si ma variable String comporte des caractères alphanumériques.

    J'arrive a trouvé un caractére définit dans ma chaine mais pas tout les alphanumérique.

    jusque ici j'arrive à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        String monText ="frp1284";
     
                  if (monText.indexOf("p")!=-1)
                	   System.out.println(monText + " contient le caractère p");  
                  else
                	  System.out.println(monText + " ne contient pas le caractère p");
    Moi je veut faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        String monText ="frp1284";
     
                  if (monText.indexOf("[A-Za-z]")!=-1)
                	   System.out.println(monText + " contient des alphanumérique");  
                  else
                	  System.out.println(monText + " ne contient pas d'alphanumérique ");
    Mais ca ne fonctionne pas.

    Merci d'avance.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu peux utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(monText!=null && monText.matches("\\p{Alnum}")){
     
    }
    tu trouvera plus de détails sur la doc

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 108
    Par défaut
    Oula il y a un truc bizare, j'ai fait plusieurs test et il y a un truc qui m'achape

    1er test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                  String monText ="A";
                  if(monText!=null && monText.matches("\\p{Alpha}"))
                	   System.out.println(monText + " contient des alphanumériques");  
                  else
                	  System.out.println(monText + " Ne contient pas des alphanumériques");
    Il m'affiche bien "Contient des alphanumériques" , jusque la tout va bien.

    2ème test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                  String monText ="ABC";
                  if(monText!=null && monText.matches("\\p{Alpha}"))
                	   System.out.println(monText + " contient des alphanumériques");  
                  else
                	  System.out.println(monText + " Ne contient pas des alphanumériques");
    Il m'affiche : " Ne contient pas des alphanumériques", se qui n'est pas cohérent vu que l'on a que des alphanumériques.

    3ème test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                  String monText ="FRP1245";
                  if(monText!=null && monText.matches("\\p{Alpha}"))
                	   System.out.println(monText + " contient des alphanumériques");  
                  else
                	  System.out.println(monText + " Ne contient pas des alphanumériques");
    Il m'affiche : " Ne contient pas des alphanumériques", si ca ne marché pas au 2ème test ca ne va pas passer la non plus.

    J'ai du louper un truc la, pouvez vous m'éclairsire svp ?

    Cordialement,

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    regarde ce tutoriel sur les expressions régulière.

    je pense que ça marchera un peu mieux comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     monText.matches("\\p{Alpha}+"))

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


    matches() ne recherche pas une sous chaine, il vérifie que la totalité de la chaine corresponde bien à l'expression régulière, et dans ton cas elle représente "un seul caractère alphanumérique", or il y a 3 caractères dans la chaine "ABC"...


    Avec matches() tu dois utiliser une expressions régulière qui vérifiera la totalité de la chaine, et donc fournir une expressions en conséquence comme l'a indiquer Sniper37.


    Par contre si tu veux uniquement te contenter de retrouver une partie de la chaine, tu dois le faire manuellement. Par exemple pour retrouver la premiere sous-chaine correspondant à une expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public static MatchResult find(String input, String regex) {
    		Matcher matcher = Pattern.compile(regex).matcher(input);
    		if (matcher.find()) {
    			return matcher.toMatchResult();
    		}
    		return null;
    	}

    Bref à toi de savoir ce que tu veux faire précisément.

    a++

  6. #6
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    question existentielle: qu'est ce qu'un caractère "alphanumérique"?
    les lettres à,ù,è, ÿ par exemple en font-elles partie?
    Les différentes méthodes isLetterOrDigit de Character étendent plus loin cette description. .... mais ce n'est peut être pas là la question ....

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 108
    Par défaut
    Merci pour le tuto Sniper37,

    Je l'ai lu attentivement et j'en ai déduit un petit bout de code qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String monText ="FRP12345";              
     
                  Pattern pattern;
                  Matcher matcher;
     
                  pattern = Pattern.compile("[a-zA-Z]");  // je definis la classe les caractères que je recherche.
                  matcher = pattern.matcher(monText); // je definis ma chaine dans laquelle je vais faire ma recherche
                  while(matcher.find()) {                      // je compare ma chaine avec le pattern
                  System.out.println("Trouvé !");}
    Ici je vais avoir dans ma console Trois Trouvé ! correspondant à FRP de mon matcher.

    Merci a tous pour votre aide, et le tuto explique vraiment bien comment procéder.

  8. #8
    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 : 46
    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
    Citation Envoyé par professeur shadoko Voir le message
    question existentielle: qu'est ce qu'un caractère "alphanumérique"?
    Selon les regexp, \{Alnum} est l'équivalent de [a-zA-Z0-9]

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Oui, mais la classe Alnum ne contient que les caractères latins non-accentués ainsi que les chiffres arabes.

    Les caractères ü, â, ó sont également des caractères alphanumériques, mais non pris comme tels en informatique.

  10. #10
    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 : 46
    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
    Citation Envoyé par dingoth Voir le message

    Les caractères ü, â, ó sont également des caractères alphanumériques, mais non pris comme tels en informatique.
    Non pris comme tels avec des regexp "POSIX", nuance. Le standard unicode leur reconnais de plein droit le terme de caractère alphabétique.

    Avec un moteur de regexp respectant http://www.unicode.org/reports/tr18/ (par exemple ICU), on peux matcher un caractère alphabétique, quel que soit sa langue, avec

    "\\p{Alphabetic}"

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

Discussions similaires

  1. tester si une chaine contient des nombres
    Par bachboucha dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/11/2008, 16h03
  2. Réponses: 35
    Dernier message: 25/06/2008, 16h50
  3. Réponses: 6
    Dernier message: 14/12/2006, 17h27
  4. Réponses: 2
    Dernier message: 21/07/2006, 12h16
  5. [VB.NET] Compléter une chaine avec des espaces
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/03/2005, 09h09

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