Execução de expressões com java

5 respostas
digaoalves

Fala galera!!

Estou com a seguinte dúvida:

É possível eu obter um resultado booleano de uma expressão representada em um String?

//Assim é claramente possível
boolean t = (((45<30)||(78>70))&&(("SE"=="SE")));

//Este é o caso
String se1 = "SE";
String se2 = "SE";
String x = "(((45<30)||(78>70))&&(("+se1+"=="+se2+")))";
boolean t = algumaCoisaExecutando(x); //Existe alguma classe... ou implementação do tipo?

Valeu!

5 Respostas

akumaldo

quando você faz:

String x = “(((45<;30)||(78>70))&&((”+se1+"=="+se2+&quot)))"

está na verdade criando uma String com o valor (((45<30)||(78>70))&&(("+se1+"=="+se2+&quot)))";

ou seja…nada será avaliado ai!!!você atribuiu simplesmente um valor a String…
Não entendi direito…o que pretende…:expressionless:

hashcode

Use BeanShell http://www.beanshell.org/
Tem um cara lá no jar que vc pode usar assim:
Classpath

import bsh.EvalError;
import bsh.Interpreter;

uso

String x = "(((45<30)||(78>70))&&(("+se1+"=="+se2+")))"; //sua salada !!
Interpreter i = new Interpreter();
String resutado= (String) i.eval(x);
System.out.printf("Resultado %s",resultado);

Boa Sorte!!

hashcode

Ops!!
Essa parada aí cara da comparação das Strings não tá legal não

se1==se2  <--- isso é igual a se1.hashcode() == se2.hashcode()

use sempre para string

se1.equals(s2);
T

hashcode:
Ops!!
Essa parada aí cara da comparação das Strings não tá legal não

se1==se2  <--- isso é igual a se1.hashcode() == se2.hashcode()

hmm… mais ou menos… na verdade, se1 == se2 vai comparar o “endereco” a que as referencias se referem… em outras palavras, nao vai te falar simplesmente que os objetos apondados sao semanticamente iguais, mas sim se eles sao exatamente o mesmo objeto

hashcode

Pode-se usar um prototype .clone() que a referências são ortogonais. Só há o mesmo address se o objeto é static.

Criado 12 de julho de 2006
Ultima resposta 13 de jul. de 2006
Respostas 5
Participantes 4