12 votes

Évaluation des expressions booléennes en Java

Je cherche un moyen relativement plus simple (par rapport à l'écriture d'un analyseur) d'évaluer des expressions booléennes en Java, et je ne veux pas utiliser la bibliothèque JEP.

J'ai une expression String comme : (x > 4 || x < 8 && p > 6) et mon objectif est de remplacer les variables par des valeurs.

Existe-t-il un moyen d'évaluer cette expression ?

Gardez à l'esprit qu'il peut s'agir de n'importe quel niveau de profondeur, de sorte que l'écriture d'un analyseur syntaxique serait très complexe.

0voto

Azeem Points 1

Une API est disponible à l'adresse suivante http://lts.online.fr/dev/java/math.evaluator/

Exemple :

MathEvaluator m = new MathEvaluator("-5-6/(-2) + sqr(15+x)");
m.addVariable("x", 15.1d);
System.out.println( m.getValue() );

0voto

Mohit Points 1

Essayez http://code.google.com/p/xpressionengine/ pour la mise en œuvre d'un logiciel libre

0voto

NateS Points 1528

J'ai trouvé les bibliothèques listées ici trop compliquées pour mes besoins. J'ai fini par utiliser Fscript : http://fscript.sourceforge.net/

0voto

Devashish Points 513

Essayez Janino http://docs.codehaus.org/display/JANINO/Home Il est très simple à utiliser, par exemple (tiré de http://docs.codehaus.org/display/JANINO/Basic ) :

// Compile the expression once; relatively slow.
ExpressionEvaluator ee = new ExpressionEvaluator(
    "c > d ? c : d",                     // expression
    int.class,                           // expressionType
    new String[] { "c", "d" },           // parameterNames
    new Class[] { int.class, int.class } // parameterTypes
);

// Evaluate it with varying parameter values; very fast.
Integer res = (Integer) ee.evaluate(
    new Object[] {          // parameterValues
        new Integer(10),
        new Integer(11),
    }
);
System.out.println("res = " + res);

0voto

Scorpion Points 2406

Vous pouvez essayer cette bibliothèque https://github.com/Shy-Ta/expression-evaluator-demo - La section "Lisez-moi" contient un grand nombre d'exemples. La bibliothèque utilise java et groovy.

En plus de prendre en charge ce cas d'utilisation, il prend également en charge un grand nombre d'autres fonctions similaires à celles d'Excel. Il est également très simple d'ajouter de nouvelles fonctions, comme le montre l'exemple.

      ExpressionsEvaluator evalExpr = ExpressionsFactory.create("(x > 4 || x < 8 && p > 6)");  
      Map<String, Object> variables = new HashMap<String, Object>();  
      variables.put("x", 100);  
      variables.put("p", 10);
      evalExpr.eval();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X