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.

16voto

Venkat Sadasivam Points 782

Utilisez Apache Commons Jexl, qui est exactement conçu pour ce type d'exigence.

http://commons.apache.org/jexl/

7voto

Matthew Kirkley Points 725

Utilisation de jexl ( http://commons.apache.org/jexl/ ), vous pouvez le faire comme suit

    JexlEngine jexl = new JexlEngine();
    jexl.setSilent(true);
    jexl.setLenient(true);

    Expression expression = jexl.createExpression("(a || b && (c && d))");
    JexlContext jexlContext = new MapContext();

    //b and c and d should pass
    jexlContext.set("b",true);
    jexlContext.set("c",true);
    jexlContext.set("d",true);

    assertTrue((Boolean)expression.evaluate(jexlContext));

    jexlContext = new MapContext();

    //b and c and NOT d should be false
    jexlContext.set("b",true);
    jexlContext.set("c",true);

    //note this works without setting d to false on the context
    //because null evaluates to false

    assertFalse((Boolean)expression.evaluate(jexlContext));

6voto

basszero Points 14539

Vous pouvez utiliser le moteur de script dans Java6 et le choix d'un des langages de script les plus populaires comme Scala , Ruby , Python , Groovy y Javascript . Ensuite, tout ce que vous avez à faire est de vous assurer que l'expression que vous voulez évaluer est dans le bon langage. Groovy est probablement le plus facile et s'intégrera le mieux.

J'ai utilisé cette méthode avec succès pour une fonctionnalité offrant des capacités similaires à une formule / colonne calculée dans un tableur populaire.

1voto

Kaouni Points 11

Voici les dernières ressources pour le cadre d'évaluation des expressions

La page d'information se trouve à l'adresse suivante http://expressionoasis.vedantatree.com/

0voto

ChssPly76 Points 53452

JUEL fournit une mise en œuvre du langage d'expression unifié de Java sans être explicitement lié à JSP. Voici son Guide de démarrage rapide L'évaluation de l'expression (#3 sur cette page) est la partie qui vous intéresse.

Alternativement, Printemps 3.0 fournit son propre langage d'expression (bien que quelque peu similaire). Cette option n'a de sens que si vous utilisez déjà Spring. Je ne l'utiliserais pas uniquement pour EL.

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