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 :

extraire les elements de string


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut extraire les elements de string
    bonsoir,
    j'ai une chaine String assez long mon but c'est d'extraire a partir de cette chaine les elements qui le constituent mais il est un peu plus particulier

    voila un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (Autres débiteurs+Clients et comptes rattachés)/5.25*IMMOBILISATION EN NV+Frais préliminaires
    le resultat souhaite apres l'insertion dans le vecteur cad contenu de vecteur:
    sera comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector v=[(,Autres débiteurs,+,Clients et comptes rattachés,),/,5.25,*,IMMOBILISATION EN NV,+,Frais préliminaires]
    y' a t'elle une fonction qui permet de faire ce traitement

    Merci pour l'aide et pour vos propositions

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    le mieux est probablement de construire un parseur, pour ça je te conseille d'utiliser Antlr (rien à voir avec Ant). En gros tu lui donne ta "grammaire" :
    une variable est une chaine alphanumérique
    une addition est : variable '+' variable
    etc.

    Avec ça il te génère un arbre qui correspondra à ton expression.

  3. #3
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour,
    Plus simple encore, avec les RegExp et la méthode String.split:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] res = s.split("\\+|\\*|/");

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    le problème des expressions régulières c'est qu'à la fin tu as les éléments en vrac (sous forme de ligne ou tableau). Avec un parseur tu obtiens un arbre ce qui permet d'évaluer l'expression beaucoup plus facilement.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut
    bonjour,
    Mais pour l'ordre est ce que la fonction split va respecter l'ordre??? comme ci indiqué dans le vector?
    pour ANTLR j'ai pas compris mais je vais cherché la doc pour bien comprendre l'astuce et apres je vais essayer

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour,
    Citation Envoyé par opensource Voir le message
    bonjour,
    Mais pour l'ordre est ce que la fonction split va respecter l'ordre??? comme ci indiqué dans le vector?
    Il aurait Suffi d'essayer le bout de code en question




    p.s.: La réponse est oui.

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut

    j'ai essayé avec les splits
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    String s="(Autres débiteurs+Clients et comptes rattachés)/5.25*IMMOBILISATION EN NV+Frais préliminaires";
     
    String[] res = s.split("\\+|\\*|/");
    System.out.print(res);
    le resultat est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [(,Autres débiteurs,Clients et comptes rattachés,),5.25,IMMOBILISATION EN NV,Frais préliminaires]
    il n'insere pas les operateurs +,*,/ ce qui est evident,
    mais mon objectifs c'est d'inserer meme les operateurs +,*,/ : mais en respectant leurs ordres dans la chaine.
    Merci pour l'aide.

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


    Le solution est de prendre le problème dans l'autre sens : plutôt que de découper la chaine selon certains critères, il serait judicieux de rechercher des éléments dans la chaine.

    Si je comprend bien je vois 3 éléments à rechercher :
    • Des symboles mathématiques : (+*/-)
    • Des chiffres
    • Des chaines de caractères (bref tout sauf les éléments précités).


    Ce que je traduirait par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	final String symbols = "[+-/*()]"; // Un caractère parmi : + - * / ( )
    	final String numbers = "\\d+(\\.\\d*)?"; // Un nombre : au moins un chiffre, éventuellement suivi d'un '.' et chiffres optionnels
    	final String strings = "[^+-/*()\\d]+"; // Une chaine : Tous ce qui n'est ni symboles ni chiffres
    Ensuite il suffit de rechercher ces éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	String input = "(Autres débiteurs+Clients et comptes rattachés)/5.25*IMMOBILISATION EN NV+Frais préliminaires";
     
    	Pattern pattern = Pattern.compile("("+symbols+")|("+numbers+")|("+strings+")");
    	Matcher matcher = pattern.matcher(input);
    	while (matcher.find()) {
    		System.out.println("FOUND : [" + matcher.group() + "]");
    	}

    Maintenant si ton besoin est plus complexe il faudra surement définir un grammaire et utiliser un générateur de parseur comme JavaCC...

    a++

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut
    je vais essayé et je vous rend la reponse ce soir?
    Merci bcp

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut
    Merci j'ai implementé votre code java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    final String symbols = "[+-/*()]"; // Un caractère parmi : + - * / ( )
    	final String numbers = "\\d+(\\.\\d*)?"; // Un nombre : au moins un chiffre, éventuellement suivi d'un '.' et chiffres optionnels
    	final String strings = "[^+-/*()\\d]+"; // Une chaine : Tous ce qui n'est ni symboles ni chiffres
    String input = "(Autres débiteurs+Clients et comptes rattachés)/5.25*IMMOBILISATION EN NV+Frais préliminaires";
     
    	Pattern pattern = Pattern.compile("("+symbols+")|("+numbers+")|("+strings+")");
    	Matcher matcher = pattern.matcher(input);
    	while (matcher.find()) {
    		System.out.println("FOUND : [" + matcher.group() + "]");
    	}
    Merci c'est vraiment ce que je cherche
    Merci pour l'aide

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

Discussions similaires

  1. Extraire les données d'une string
    Par bastian06n dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/08/2010, 15h16
  2. extraire les elements d'une liste
    Par libertad1 dans le forum Prolog
    Réponses: 6
    Dernier message: 16/01/2010, 23h09
  3. Réponses: 5
    Dernier message: 25/05/2009, 20h09
  4. [C#] Comment extraire les parties d'une string ?
    Par mrpowerboy dans le forum C#
    Réponses: 3
    Dernier message: 21/02/2006, 09h10
  5. Extraire les icônes d'une DLL
    Par Globus dans le forum MFC
    Réponses: 6
    Dernier message: 13/09/2002, 13h44

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