Ce source donne un exemple de code pour évaluer une expression logique dynamiquement dans un programme java.
Exemple d'une expression logique à évaluer:*(critere1 && critere2) || critere3*
avec critere1 ayant la valeur false
avec critere2 ayant la valeur true
avec critere3 ayant la valeur false
Resultat de l'évaluation :false
Source / Exemple :
import java.util.Iterator;
import java.util.Vector;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Test {
Vector<Critere> listeCritere = new Vector<Critere>();
String expressionAtester = null;
public static void main(String[] args) {
Test test = new Test();
test.execute();
}
private void execute() {
expressionAtester = "(critere1 && critere2) || critere3";
Critere critere1 = new Critere("critere1", false);
listeCritere.add(critere1);
Critere critere2 = new Critere("critere2", true);
listeCritere.add(critere2);
Critere critere3 = new Critere("critere3", false);
listeCritere.add(critere3);
ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine
ScriptEngine engine = factory.getEngineByName("JavaScript");
// On remplace les noms dans l'expression à tester par la valeur vrai ou
// faux liée aux différents criteres
System.out.println("Exemple d'une expression logique à évaluer:*"
+ expressionAtester + "*");
Iterator<Critere> iterator = listeCritere.iterator();
Critere critere = null;
String evaluateCommande = expressionAtester;
while (iterator.hasNext()) {
critere = iterator.next();
System.out.println("avec " + critere.getName()
+ " ayant la valeur " + critere.isEtat());
evaluateCommande = evaluateCommande.replaceAll(critere.getName(),
critere.getEtat());
}
System.out.println("");
System.out.println("********");
System.out.println("Expression logique aprés remplacement:*"
+ evaluateCommande + "*");
Boolean resultat = null;
try {
String expression = "if (" + evaluateCommande + ") " + "{true;}"
+ "else" + "{false;}";
System.out.println("Expression javascript evaluée :*" + expression
+ "*");
// evaluate JavaScript code from String
resultat = (Boolean) engine.eval(expression);
System.out.println("");
System.out.println("********");
System.out.println("Resultat de l'évaluation :"
+ resultat.toString());
} catch (ScriptException e) {
System.out.println("Erreur de syntaxe");
e.printStackTrace();
}
}
public class Critere {
public Critere(String name, boolean etat) {
super();
this.name = name;
this.etat = etat;
}
String name = null;
boolean etat = false;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEtat() {
return "" + etat;
}
public boolean isEtat() {
return etat;
}
public void setEtat(boolean etat) {
this.etat = etat;
}
}
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.