160 votes

Y a-t-il une fonction eval() en Java ?

Je suis nouveau à Java. J’ai une chaîne comme suit :

Maintenant, je dois obtenir le résultat de 20 à l’aide de la chaîne. Je sais que dans certaines autres langues le `` fonction va le faire. Comment puis-je faire cela en Java ?

157voto

Jeff Storey Points 22103

Vous pouvez utiliser le `` de la classe et de l’évaluer comme une chaîne de Javascript

Il peut y avoir une meilleure façon, mais celui-ci fonctionne.

54voto

Stephen C Points 255558

Il n'existe pas de standard de Java une classe ou une méthode qui permettra de faire ce que vous voulez. Vos options comprennent:

  • Sélectionner et d'utiliser certaines de tiers l'évaluation de l'expression de la bibliothèque. Par exemple JEL ou de l'une de la demi-douzaine de bibliothèques répertoriées ici.

  • Placer l'expression dans le code source Java pour une classe avec un eval méthode, envoyer que pour le compilateur de Java, puis de charger la résultante classe compilée.

  • L'utilisation de certains langage de script qui peut être appelée à partir de Java comme un évaluateur d'expression. Les possibilités incluent Javascript, BeanShell, et ainsi de suite.

  • Ecrivez votre propre évaluation de l'expression à partir de zéro.

La première approche est sans doute plus simple. Les deuxième et troisième approches sont un risque de sécurité potentiel si vous obtenez l'évaluation de l'expression d'un utilisateur non fiable. (Pensez à l'injection de code.)

10voto

DVK Points 63282

No, vous ne pouvez pas avoir un générique « eval » en Java (ou n’importe quel langage compilé). Sauf si vous êtes prêt à écrire un compilateur Java et une machine virtuelle Java pour être exécutés à l’intérieur de votre programme Java.

Oui, vous pouvez avoir une bibliothèque pour évaluer des expressions algébriques numériques comme celui ci-dessus - voir ce fil de discussion.

7voto

Adi Points 2655

Comme les réponses précédentes, il n’y a aucune norme API en Java pour cela.

Vous pouvez ajouter les fichiers jar groovy à votre chemin d’accès et groovy.util.Eval.me("4*5") fait votre travail.

3voto

user1096901 Points 53

La rédaction de votre propre bibliothèque n'est pas si difficile que peut-être u chose. Voici le lien pour Shunting-yard algorithme à l'étape par étape de l'algorithme explenation. Bien, vous allez avoir à analyser les données d'entrée pour les jetons d'abord.

Il y a 2 autres questions qui peuvent vous donner quelques informations: Transformer une Chaîne de caractères dans une Expression Mathématique? Ce qui est une bonne bibliothèque pour l'analyse des expressions mathématiques en java?

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