This week's giveaway is in the Android forum. We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line! See this thread for details.

I've got a String, for example <code> String s = "5.0-4.0*(2.0+2.0)+0.0*(2.0+2.0)*(2.0+1.0)+1.0*(2.0+2.0) *(2.0+1.0)*(2.0-1.0)"; or String s = "2^3+5*3^2+3*4+2"; </code> Is there a way to calculate the result of the term, given by the String? I tried Double d = new Double(s) and I got a NumberFormatException.

If you don't have an idea how to solve this with the Java standart lib, do you know a free math lib that can handle String terms?

I would be very happy to receive some comments! Thanx ind advance! - Thomas -

what you need, is a math expression parser. The grammar for simple arithmetic expression looks something like this:

The next step is to write a scanner that splits your input into tokens:

The last step is to write the parser-class that tests if your input string is "well-formed" and builds the abstract syntax tree with which you can evaluate your formula. For each rule of your grammar you implement a method. Each of these methods returns a node of the abstract syntax tree. Each node has a method (e.g. evaluate()) which helps you to evaluate the formula. The evaluate()-method of a "plus-node" might something like this: . To evaluate the entire formula, you call the evaluate()-method of the root of your abstract syntax tree.

Your replies helped me a lot! At first I was a bit disappointed to read that my problem couldn't be solved that easy by the J2SE.

But Stefan gave me the solution by telling me what I was searching for: a java "math expression parser" !

The rest of the job was done by Google I found JEP from Singular Systems, offering a Java Math Expression Parser withtwo different licenses, fitting my needs.

Thanx to both of you! You did me a great favor!

Best regards! - Thomas - [ May 23, 2004: Message edited by: Thomas Rochon ]