43 votes

Java: analyser une expression mathématique donnée sous forme de chaîne et renvoyer un nombre

Existe-t-il un moyen en Java d’obtenir le résultat de cette expression mathématique:

 String code = "5+4*(7-15)";
 

C'est-à-dire quel est le meilleur moyen d'analyser une expression arithmétique?

36voto

Nick Holt Points 12945

Vous pouvez le passer à un BeanShell bsh.Interpreter, quelque chose comme ceci:

Interpreter interpreter = new Interpreter();
interpreter.eval("result = 5+4*(7-15)");
System.out.println(interpreter.get("result"));

Vous voudrez vous assurer que la chaîne vous évaluer est à partir d'une source de confiance et les précautions d'usage, mais sinon ça va marcher tout de suite.

Si vous voulez aller plus compliqué (mais plus sûr) approche que l'on pourrait utiliser ANTLR (que je soupçonne est une les mathématiques de la grammaire comme un point de départ) et de compiler et interpréter l'énoncé de vous-même.

31voto

fasseg Points 7654

J'ai récemment développé un analyseur d'expression et l'ai publié sous la licence Apache. vous pouvez le récupérer à http://projects.congrace.de/exp4j/index.html

espérons que cela a aidé

8voto

Vous pouvez utiliser la classe ScriptEngine et l'évaluer en tant que chaîne javascript.

 ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");        
Object result = engine.eval("5+4*(7-15)");
 

En effet, vous devriez savoir que le résultat de l'instruction suivante en javascript:

    eval('var aa=5+4*(7-15)')
   aa // -27
 

Il y a peut-être un meilleur moyen, mais celui-ci fonctionne.

5voto

Andy Points 4242

Probablement pas d'une manière aussi simple que vous l'espérez!

Mais peut-être pourriez-vous utiliser un javax.script.ScriptEngine et traiter la chaîne comme une expression ECMAScript, par exemple?

Jetez un coup d'œil à: Script pour la plate-forme Java .

4voto

soulmerge Points 37314

Il n'y a pas de moyen intégré pour le faire. Mais vous pouvez utiliser l'une des nombreuses calculatrices open source disponibles.

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