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 :

expression régulière en java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut expression régulière en java
    salut
    je veux utiliser les regex pour vérifier q'une chaine de caractère a la forme d'une matrice.
    pex la chaine ((1,2),(3,4),(5,6)) est la matrice à 2 colonnes et 3 lignes
    je veux également récupérer le nombre de lignes ainsi que le nombre de colonnes de cette matrice
    j'ai essayer bcp de motif mais ça marche pas

    est ce que quelqu'un a une idée?

    merci en avance

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    En une seule expression reguliere je ne pense pas que tu puisses le faire. Par contre voici ce que j'ai reussi avec 2 regexp et un peu de bidouille autour:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
      public void testPattern(String aString)
      {
        // Match la matrice complete
        Pattern pat = Pattern.compile("^\\((\\([0-9]+(,[0-9]+)*\\))(,\\([0-9]+(,[0-9]+)*\\))*\\)$");
        Matcher match = pat.matcher(aString);
     
        // Match ligne par ligne pour les compter
        Pattern pat2 = Pattern.compile("\\([0-9]+(?:,[0-9]+)*\\)");
        Matcher match2 = pat2.matcher(aString);
     
        if (match.matches())
        {
     
     
          int start = 0;
          int rows = 0;
          int columns = 0;
          boolean success = true;
          while(match2.find(start))
          {
            rows++;
            start = match2.end();
            if (0 == columns)
            {
              columns = countColumn(match2.group());
            }
            else
            {
              if (columns != countColumn(match2.group()))
              {
                System.out.println("Matrice invalide, lignes non identiques en taille");
                success = false;
              }
            }
          }
     
          if (success)
          {
            System.out.println("Trouve: lignes = " + rows + " Colonnes = " + columns);
          }
        }
        else
        {
          System.out.println("No match");
        }
      }
     
      private int countColumn(String aString)
      {
        int res = 1;
     
        for (int ind=0; ind < aString.length(); ind++)
        {
          if (aString.charAt(ind) == ',')
          {
            res++;
          }
        }
     
        return res;
      }
    Bon c'est bien parce que ca m'amusait et qu'on est Vendredi,

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Par défaut
    pour connaitre le nombre de ligne et de colonne tu peux faire ceci :

    String[] new = tavariable.split("),(");
    int colonne = new.length;
    int ligne = new.split(",").length;

    C'est un peu brutal mais ça doit marcher.

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par lex13
    pour connaitre le nombre de ligne et de colonne tu peux faire ceci :

    String[] new = tavariable.split("),(");
    int colonne = new.length;
    int ligne = new.split(",").length;

    C'est un peu brutal mais ça doit marcher.
    Sauf qu'il faut pas appeler ta variable new...

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Par défaut
    Oui en fait. J'ai pas vérifié le code, je l'ais tapé direct sur le forum

  6. #6
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Citation Envoyé par lex13
    pour connaitre le nombre de ligne et de colonne tu peux faire ceci :

    String[] new = tavariable.split("),(");
    int colonne = new.length;
    int ligne = new.split(",").length;

    C'est un peu brutal mais ça doit marcher.
    Ourgh j'ai ete carrement violent moi bon au moins ca m'a amuse ma solution

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  7. #7
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Par défaut
    Bin en fait ce que j'ai proposé ça marche juste pour avoir le nb de colonne et de ligne, mais je n'ai rien proposé pour vérifier si il sagit bien d'une matrice...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    le code de bulbo marche très bien:
    -il vérifie la forme de la matrice
    -il donne le nombre de ligne et de colonne appropriés
    et celui de lex13 est bcp plus optimisé

    je vous remerci tous les deux!

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    salut,
    le string avec lequel on fait le split ne doit pas contenir de paranthèse
    l'expression String[] motif=matrice.split("),(");
    génère l'exeption suivante
    Exception in thread "main" java.util.regex.PatternSyntaxException: Unmatched closing ')'
    ),(
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at Nbligne.main(Nbligne.java:13)
    alors je l'ai stocké dans une variable à part mais ça génère la même execption

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    il fallait juste protéger les paranthèses (mais avec deux \\)
    j'ai pensé à le faire mais avec un seul \ (comme on le fait pour le " ou le \)
    donc
    String[] motif=matrice.split("\\),\\("); est la bonne expression.


    int ligne = new.split(",").length; n'est pas correct (on peut pas appliqué un split sur les tableaux). de plus, il faut inverser ligne et colonne
    voici le code final:


    String[] motif=matrice.split("\\),\\(");
    int ligne = motif.length;
    int colonne = motif[0].split(",").length;

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2009, 08h31
  2. Les expressions régulières en java
    Par blackhock dans le forum Général Java
    Réponses: 2
    Dernier message: 21/04/2009, 13h05
  3. Expression régulière avec java
    Par mouvma dans le forum Général Java
    Réponses: 2
    Dernier message: 18/01/2008, 17h00
  4. expression régulière en java
    Par shirya dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 21/09/2007, 16h10
  5. Expressions régulières en Java
    Par jason69 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 04/07/2007, 10h50

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