Como isolar uma variavel matemática de uma expressão string em java , e retornar seu valor?

Por favor ,alguem sabe como isolar uma variavel matemática em java ?
Exemplo : usuário entra com uma expressão string em um campo de texto
assim 3*x + 1 = 16 + 78 e um método faça a leitura dessa string , e
me retorne o valor 31 . Que não seja com uma API paga como o JEP ou
qualquer outra.
Obrigado pela atenção .

É só pra equação do primeiro grau que vc quer fazer isso?

Se for esse o caso, vc pode ler a String e fazer sua própria lógica…

Só equações simples como esta do exemplo , nada de raizes ou potenciação . É para um trabalho de faculdade de criptografia simples de frases.

bom, pelo que pude perceber, vc separa os termos por espaços. Assim, vc já poderia separá-los utilizando o método split da classe String. Com esses dados, não seria difícil de fazer a lógica. Basta "jogar"todos os termos com x para esquerda do igual, os termos isolados pro lado direito, respeitando a regra de mudança de sinal quando tiver que passar de um lado para o outro. Depois vc somaria todos os termos independentes, bem como os coeficiente de x, dividindo os valores para saber o valor do x…

Vc já fez a matéria de compiladores na faculdade? Se sim, que tal aplicar toda aquela teoria num outro trabalho? =D
Se não, nem sei como posso te ajudar =/

Você pode usar ANTLR e criar um Parser para sua expressão.

É o seguinte pessoal , eu já estou usando um parser desse exemplo abaixo . Mas parece que ele não suporta as expressões que eu preciso agora. Acho que vou ter que tratar a string de maneira que ele consiga resolver a expressão como o renzonuccitelli disse . O problema que a documentação dele é muito vaga , e não sei quais expressões ele irá suportar . http://lts.online.fr/dev/java/math.evaluator/matheval.javadoc/com/primalworld/math/MathEvaluator.html . Vou tentar aqui depois digo se consegui . Se se alguem já utilizou esse parser , poderia me ajudar muito . Obrigado a todos .

MathEvaluator m = new MathEvaluator("-5-6/(-2) + sqr(15+x)");
m.addVariable(“x”, 15.1d);
System.out.println( m.getValue() );