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 :

Class Method toString, puis traitement


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut Class Method toString, puis traitement
    Salut a tous,

    j'ai plus ou moins un probleme que je ne sais pas resoudre "proprement".

    Pour resumer, j'ai une appli qui va me filer un string qui contient toute la definition d'une methode (java.lang.reflect.Method)
    ils ont fait un method.toString (et non pas method.getName() comme j'avais dit au debut) , ce qui me donne un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    
    public abstract void le.package.de.la.classe.methode(java.lang.String) 
    dans mon appli j'ai juste besoin de recuperer la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le.package.de.la.classe.methode
    et bien sur, il ne m'est pas possible de modifier la string qui est envoyé

    Pour le moment, l'algo que j'ai fait (qui marche, mais que je ne trouve pas propre) c'est:
    -je coupe la string en fonction des espaces avec split()
    -je teste chaque element s'ils font partie de la liste: public, private, protected, abstract, static, final, synchronized et native
    (Liste qui contient les mots clé pouvant se trouver au debut, avant le type de retour)

    Le premier element qui ne fait pas partie de cette liste, alors c'est le type de retour, donc forcement, le suivant, c'est le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le.package.de.la.classe.methode(java.lang.String) 
    je peux ensuite le spliter par rapport a ( et prendre le premier element, et j'aurai mon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le.package.de.la.classe.methode

    cela marche, mais je ne trouve pas cela propre, et je ne pense pas qu'ils apprecient si je livre ca

    je viens de penser que je peux faire autrement:
    -spliter en fonction de ( pour recuperer le premier element
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public abstract void le.package.de.la.classe.methode
    -spliter en fonction des espaces pour recuperer le dernier element:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le.package.de.la.classe.methode
    plus simple, mais pas forcement plus propre.
    Vous en pensez quoi ?
    vous avez une idée de comment faire ca plus proprement ?

    j'avais cherché pour repasser le format String en objet de class Method, mais j'ai rien trouvé (comme on peut fait un Integer.parseInt)

    Merci
    mike

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


    Tu peux éventuellement passé par une expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	Pattern pattern = Pattern.compile(".* ([a-zA-Z.]+)[(].*");
     
    		Matcher matcher = pattern.matcher(str);
    		if (matcher.matches()) {
    			String name = matcher.group(1);
    			System.out.println(name);
    		}
    a++

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut
    Merci adiGuba,

    je viens de tester, et ca marche.
    mais j'ai pas tout compris pour l'expression reguliere.

    ce que j'en comprend:
    on prends n'importe quels caracteres : ".*"
    suivi d'un espace " "
    suivi d'une lettre (maj ou min) ou n'importe quel caractere que l'on repete au moins 1 fois "([a-zA-Z.]+)"
    suivi d'une parenthese ouvrant "[(]"
    suivi de n'importe quoi ".*"

    la ou je ne suis pas sur, c'est pour la partie "([a-zA-Z.]+)"
    le . est il utilisé comme le caractere point, ou comme sa fonction de n'importe quel caractere ?

    donc le matcher.matches retourne true si ca correspond a l'expression reguliere.

    La ou j'ai du mal, c'est comment il arrive juste a me sortir juste ce qu'il me faut, juste en faisant un matcher.group(1)
    c'est parce qu'il y a les parentheses entre "[a-zA-Z.]+" ??

    Merci

  4. #4
    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
    Citation Envoyé par mikeOSX Voir le message
    la ou je ne suis pas sur, c'est pour la partie "([a-zA-Z.]+)"
    le . est il utilisé comme le caractere point, ou comme sa fonction de n'importe quel caractere ?
    Dans un bloc [ ] il est utilisé comme le caractère "point", et donc comme séparateur.

    Citation Envoyé par mikeOSX Voir le message
    donc le matcher.matches retourne true si ca correspond a l'expression reguliere.
    Oui tout à fait.

    Citation Envoyé par mikeOSX Voir le message
    La ou j'ai du mal, c'est comment il arrive juste a me sortir juste ce qu'il me faut, juste en faisant un matcher.group(1)
    c'est parce qu'il y a les parentheses entre "[a-zA-Z.]+" ??
    Oui c'est tout à fait cela !
    group() ou group(0) te renverra toute la chaine trouvé (surtout utile lorsqu'on utilise find()), et group(1) et + te renverront les éléments entre parenthèses correspondant. Chaque groupe étant numéroté par rapport à sa première parenthèse.

    a++

  5. #5
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut
    yeah !
    un grand merci a toi !!!

    ca m'a l'air bien puissant les expressions regulieres

    et d'un seul coup, mon code devient plus leger !!
    bon, a part pour l'expression reguliere, mais avec quelques commentaires, ca passe tout seul

    encore merci !!

  6. #6
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Par défaut
    Je viens de tester chez moi et le getName() ne retourne que le nom de la méthode chez moi et non pas un chemin complet au contraire d'un toGenericString ou toString().

    Du coup j'obtiens le bon résultat en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            Method m = this.getClass().getDeclaredMethods()[0];
            System.out.println(m.getDeclaringClass().getCanonicalName() + "." + m.getName());
    Précision, je suis en java 1.6 openJdk, cela à peut être une influence.

  7. #7
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut
    Exact, je me suis trompé.
    Dans le code que je ne peux pas toucher, il fait dans un premier temps un getName() pour faire des tests dans son appli, mais apres, ce qu'il m'envoie c'est bien le toString().

    Désolé pour cette confusion, je modifie ^^

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

Discussions similaires

  1. [Langage][Classe][Methode]Comment récuperer les arguments d'une fonction ?
    Par FremyCompany dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/07/2006, 16h06
  2. Réponses: 1
    Dernier message: 17/05/2006, 20h00
  3. Envoie de 2 variables avec winsock puis traitement
    Par Xdrei dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 18/03/2006, 10h27
  4. Super classes et sous-classes/Méthodes
    Par smag dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2005, 23h10
  5. [Exception]Connaitre la pile d'appel de classes/méthodes
    Par salome dans le forum Général Java
    Réponses: 2
    Dernier message: 19/03/2005, 20h21

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