字符串加倍(“ a + b”)

时间:2018-10-19 22:40:37

标签: java spring

public class simpleClass{
    public static void main(String[] args){
        String a = "2 + 3";
        double b = Double.parseDouble(a);
        System.out.println(b);
    }
}

那只是显示我的问题的简单代码。

为什么在我运行程序时这不起作用?

我在Spring中制作了一个简单的计算器,并且将数字作为字符串(也包括+,-,/,*)添加,但是在解析后我在IJ中遇到错误。

3 个答案:

答案 0 :(得分:2)

您可以使用ScriptEngine评估字符串并将其解析为双精度。

赞:

public static void main(String[] args) {
    // Base Query
    String a = "5 * 2";

    // Query Result
    double b = EvalMath(a);

    // Print Result
    System.out.println(b);
}

// Evalute Math in String
static double EvalMath(String a) {
    double result = 0;

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");

    try {
        result = Double.parseDouble(engine.eval(a).toString());
    } catch (ScriptException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return result;
}

希望有帮助! :D

答案 1 :(得分:0)

Double.parseDouble()无法将双精度字符转换为双精度字符,因此'+'将中断该行。

尝试:

string a1 = "2";
string a2 = "3";
double b = Double.parseDouble(a1) + Double.parseDouble(a2);
System.out.println(b);

答案 2 :(得分:0)

首先检查它:Double.parseDouble(),它使用字符串。如果不是数字,则将引发NumberFormatException。 2 + 3是一个表达式。因此,该方法无法将其解析为两倍。

  

此处提供完整解决方案:

public class simpleClass {
public static void main(String[] args) {
    String a = "2 + 3";
    /// First of all don't add space on equation
    a.replaceAll(" ", ""); // This will remove all whitespace
    double op1 = 0, op2 = 0; // variable for storing value
    char operand = '\0'; // operand
    boolean flag = false; // false means no value taken for operation

    for (int i = 0; i < a.length(); i++) {
        String tmp = "";
        if (Character.isDigit(a.charAt(i))) {
            tmp += a.charAt(i);
            if (!flag)
                op1 = Double.parseDouble(tmp);
            else
                op2 = Double.parseDouble(tmp);
        } else if (a.charAt(i) == '+' || a.charAt(i) == '-' || a.charAt(i) == '*' || a.charAt(i) == '/') {
            operand = a.charAt(i);
            flag = true; // now we have a value in op1
        }
    }
    double result = 0;

    if (operand == '+') {
        result = op1 + op2;
    } else if (operand == '-') {
        result = op1 - op2;
    } else if (operand == '*') {
        result = op1 * op2;
    } else if (operand == '/') {
        result = op1 / op2;
    }

    System.out.println(result);
}

}

Output: 5