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

API standards et tierces Java Discussion :

Evaluer String et renvoi booléen ! Cela existe ?


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 22
    Points : 22
    Points
    22
    Par défaut Evaluer String et renvoi booléen ! Cela existe ?
    Bonjour,

    Existe-t-il une API Java permettant d'évaluer une expression contenu dans une chaine de caractères et renvoyant un booléen ?

    Par exemples :

    - f("5>3") = vrai
    - f("5<3") = faux
    - f("3=3") = vrai
    - f("4!=2") = vrai
    - f("4!=4") = faux


    Je cherche depuis un moment mais je n'ai rien trouvé

    Merci d'avance.

    Nono

  2. #2
    Membre confirmé Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Points : 576
    Points
    576
    Par défaut
    Salut ^^
    En même temps, tu n'en a pas pour longtemps a codé un truc similaire toi même.
    Regarde du coté des expressions régulière pour ce qui est de déchiffrer les opérateur et les chiffre, et un simple cast de string vers int fera l'affaire.

  3. #3
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Tu peu utiliser Bsh comme interpreter.
    Voici un exemple écrit en 2minutes utilisant Bsh

    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
    62
    63
    64
    65
    /** Example for developpez.com
    */
    public abstract class EvaluateTool {
     
        /** List a BSH interpreters 
         */
        private static ThreadLocal<bsh.Interpreter> interpreters = new ThreadLocal<bsh.Interpreter>();
     
        /** Creates a new instance of Test */
        private EvaluateTool() {
            /** not used
             */
        }
     
        /** Evaluate a boolean function like "4>5" from a litteral string representation
         *  @param function Literral string representing a boolean function
         *  @return Result of the evaluation (true or false)
         *  @throw EvaluationException exception throwed if the litteral string doesn't represent a valid boolean function
         */ 
        public static boolean evaluate(String function) throws EvaluationException {
            bsh.Interpreter interpreter = interpreters.get();
            if( interpreter == null ) {
                interpreter = new bsh.Interpreter(); 
                interpreters.set( interpreter );
            }
     
           try {
               Object result = interpreter.eval(function);
               if( result == null ) 
                   throw new EvaluationException( function , "function " + function + " is evaluated to null");
     
               if( ! ( result instanceof Boolean ) )
                   throw new EvaluationException( function , "function " + function + " is not evaluated to a boolean");
     
               return (Boolean)result;
           }
           catch(EvalError ee) {
               throw new EvaluationException( function , "Unable to parse the function " + function , ee );
           }
        }
     
        /** EvaluationExceptions throws when an error occurs while evaluating a boolean function from it's literral representation
         */
        public static class EvaluationException extends Exception {
     
            private String function = null;
     
            public EvaluationException(String function , String message , Throwable cause ) {
                super(message,cause);
                this.function = function;
            }
     
            public EvaluationException(String function , String message) {
                this(function,message,null);
            }
     
            public EvaluationException(String function) {
                this(function,null,null);
            }
     
            public String getFunction() {
                return this.function;
            }
        }
      }

    Exemple d'utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            try {
                System.out.println( EvaluateTool.evaluate("8>4") );
            }
            catch(EvaluateTool.EvaluationException e) {
                e.printStackTrace();
            }

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


    Sinon avec Java 6 il y a le moteur Javascript qui peut faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		ScriptEngineManager manager = new ScriptEngineManager();
    		ScriptEngine engine = manager.getEngineByMimeType("text/javascript");
    		boolean result = (Boolean) engine.eval("5>3");
    a++

  5. #5
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Sinon avec Java 6 il y a le moteur Javascript qui peut faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		ScriptEngineManager manager = new ScriptEngineManager();
    		ScriptEngine engine = manager.getEngineByMimeType("text/javascript");
    		boolean result = (Boolean) engine.eval("5>3");
    a++
    Décidement l'api de java6 me surprends encore tout les jours.
    Merci de l'info.

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 22
    Points : 22
    Points
    22
    Par défaut Mille merci !
    Je vous remercie tous ! C'est exactement ce dont j'avais besoin.
    Que ferais-je sans ce forum ???

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

Discussions similaires

  1. Tuto MVVM : dans le source, une property de type string retourne un booléen ?!
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 23/03/2009, 08h35
  2. [Maths] Evaluation String en Boolean
    Par D-NiM dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 26/06/2007, 06h56
  3. Réponses: 9
    Dernier message: 10/05/2007, 17h57
  4. Linux CE, cela existe ?
    Par A.Ducharme dans le forum Linux
    Réponses: 2
    Dernier message: 06/04/2007, 17h18
  5. un Excel avec plus de lignes, cela existe il ?
    Par petitours dans le forum Excel
    Réponses: 11
    Dernier message: 30/05/2006, 17h47

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