Evaluer une expression booléenne

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 594 fois - Téléchargée 15 fois

Contenu du snippet

Cette source permet d'évaluer une expression booléenne sous la forme : ( ( 2 < 1 ) OU ( 3 >2 ) ) ET ( 1 = 1 )

Source / Exemple :


package fr.julien.pseudocode.metier.structures;

import fr.julien.pseudocode.metier.exception.ExpressionIncorrecteException;

/**

  • <b>EvaluateurExpressionBooleenne est un singleton qui permet de définir une méthode d'évaluation des expressions booleennes</b>
  • @author Julien
  • @version 1.0
*
  • /
public class EvaluateurExpressionBooleenne { /**
  • Unique instance de la classe EvaluateurExpressionBooleenne
  • /
private static final EvaluateurExpressionBooleenne instance = new EvaluateurExpressionBooleenne(); /**
  • Constructeur du singleton
  • /
private EvaluateurExpressionBooleenne(){ super(); } /**
  • Cette fonction permet d'évaluer une expression booléenne telle que
  • <ul>
  • <li>2>1</li>
  • <li>( ( 2 < 1 ) OU ( 3 >2 ) ) ET ( 1 = 1 )</li>
  • </ul>
  • @param condition
  • La condition à évaluer
  • @return la valeur de la condition
  • @throws ExpressionIncorrecteException
  • Si l'expression entrée est incorrecte
  • /
public boolean evaluer(String condition) throws ExpressionIncorrecteException{ String c=condition.replaceAll("\\p{Space}", ""); if(c.contains("(")){ int split=0; boolean et=true; int level=0; for(int i=0; i<c.length();i++){ if(c.charAt(i)=='('){ level++; } else if(c.charAt(i)==')'){ level--; } if(level==0 && c.substring(i, i+2).equals("ET")){ et=true; split=i; break; } else if(level==0 && c.substring(i, i+2).equals("OU")){ et=false; split=i; break; } } if(et){ return evaluer(c.substring(1, split-1)) && evaluer(c.substring(split+3, c.length()-1)); } else { return evaluer(c.substring(1, split-1)) || evaluer(c.substring(split+3, c.length()-1)); } } else { boolean res=false; if(c.contains("=")){ String[] termes=c.split("="); res=(termes[0].equals(termes[1])); } else if(c.contains("<")){ String[] termes=c.split("<"); res=(Double.parseDouble(termes[0])<Double.parseDouble(termes[1])); } else if(c.contains(">")){ String[] termes=c.split(">"); res=(Double.parseDouble(termes[0])>Double.parseDouble(termes[1])); } else { throw new ExpressionIncorrecteException("Condtion incorrecte : " +condition); } return res; } } /**
  • Accesseur à l'instance de la classe
  • @return the instance
  • /
public static EvaluateurExpressionBooleenne getInstance() { return instance; } } package fr.julien.pseudocode.metier.exception; public class ExpressionIncorrecteException extends Exception { /**
  • /
private static final long serialVersionUID = 860142680101409776L; /**
  • /
public ExpressionIncorrecteException() { super(); } /**
  • @param message
  • @param cause
  • /
public ExpressionIncorrecteException(String message, Throwable cause) { super(message, cause); } /**
  • @param message
  • /
public ExpressionIncorrecteException(String message) { super(message); } /**
  • @param cause
  • /
public ExpressionIncorrecteException(Throwable cause) { super(cause); } }

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.