Bom dia pessoal…
Estou com um problema terrível que está me quebrando a cabeça.
Preciso transformar uma String que recebe uma soma em um número inteiro contendo o resultado:
String test1="1 + 1";
Se eu colocar uma variável inteira recebendo essa soma me aparece o resultado:
int test2=1 + 1;
int test2 == 2;
Mas se eu quiser converter a String para um int me dá um NumberFormatException.
String test1="1 + 1";
int test2=Integer.parseInt(test1);
//ao tentar converter, teoricamente (rsrsrsr) deveria aparecer o resultado como no exemplo acima
Como eu faço para tirar o cálculo da String e transformar no resultado?
Procure pelo design pattern Interpreter. Ah, e parece que o Mark_ameba, daqui do fórum, implementou algo assim e disponibilizou no site dele. Dê uma procurada por lá…
Olá, de uma olha em regex, provavelmente ira te ajudar.
Por que isso deveria funcionar? Pois bem, NÃO tem jeito (pelo menos que eu saiba, caso tenha não aprendi a mágica ainda).
Acontece que você esta tentando transformar uma String “qualquer” em um numero e "1 + 1 " != de 1 + 1 .
De uma olhada nos artigos aqui no guj que poderão te ajudar mais, e tem algumas apostilas no site da Caelum que te darão grandes dicas :D.
Única forma que achei de pegar o resultado em um int( mas sem esse sinal de mais, não tem como isso), se você quer o resultado:
// Declara a string com esse valor
String teste1 = "1 + 1";
//Pega o primeiro caractere "1" e depois o quarto "1" e atribui um a cada int
int p1 = teste1.charAt(0);
int p2 = teste1.charAt(4);
/* abaixo eu crio um for, porque em ASCII
* o caractere "1" tem o valor "49" sendo que você quer o valor "1".
*/
for(int total = p1 + p2; total >=2; total--){
// aqui quando ele obtiver o total igual ao resultao ele imprime.
if(total == 2){
System.out.println("Resultado: "+total);
}
}
[quote=c354r]Única forma que achei de pegar o resultado em um int( mas sem esse sinal de mais, não tem como isso), se você quer o resultado:
// Declara a string com esse valor
String teste1 = "1 + 1";
//Pega o primeiro caractere "1" e depois o quarto "1" e atribui um a cada int
int p1 = teste1.charAt(0);
int p2 = teste1.charAt(4);
/* abaixo eu crio um for, porque em ASCII
* o caractere "1" tem o valor "49" sendo que você quer o valor "1".
*/
for(int total = p1 + p2; total >=2; total--){
// aqui quando ele obtiver o total igual ao resultao ele imprime.
if(total == 2){
System.out.println("Resultado: "+total);
}
}
Obs: Só não entendi a lógica…
[/quote]
O problema começaria se fosse uma expressão gigante como por exemplo:
String n = "123456789 * 123456789 / 123456789 -123456789 +123456789";
bom, n sei pq vc qer fazer isso…já q existe varias formas mais faceis…
uma ideia q tive agora foi asssim,
vc pegar essa String e transformar num array de char, ai vc ia concatenando até axar o char " + ou - ou * ou /", qndo encontrase vc tinha a primeira parte concatenada, depois vc fazia novamente até o final da string…
entendeu??
vlw