Evaluation d'une expression logique (critere1 && critere2) || critere3 dynamiquement dans un programme java

Soyez le premier à donner votre avis sur cette source.

Vue 5 784 fois - Téléchargée 317 fois

Description

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;
		}

	}

}

Codes Sources

A voir également

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.