为什么我无法转换字符串"(2 + 2)"到整数(java)?

时间:2017-05-10 21:40:02

标签: java string int type-conversion

我想将字符串转换为整数,但它不起作用。我认为问题在于字符串不是"干净",请看这个例子:

public class Test{
    public static void main(String[] args){
        String str = "(2+2)";
        int conv = Integer.parseInt(str);
        System.out.println(conv);
    }
}

为什么它不起作用?我也可以毫无问题地定义int x = (2+2);

问题到底是什么,有一种简单的方法可以解决它吗?

*目的:我刚刚完成了一个代码,它将检测数学表达式是否正确(括号,符号,算术内容)。例如,字符串输入为((8+7)*2),程序将返回true。 但现在我需要找到一种方法来计算它并返回它的解,30。 (如果你想我也可以发布我的代码,但我不想让这个问题看起来很长。)

2 个答案:

答案 0 :(得分:1)

  

为什么它不起作用?

由于此处有一些无效字符,String无法解析为整数:

"(2+2)"

您无法使用(解析) +Integer.parseInt等无效字符。但是,当+唯一的字符时,它是一个前导符号,它是有效的,即

String strOne = "+2";
String strTwo = "+2345";
String strThree = "+237645";

等...

  

有一种简单的方法可以解决它吗?

没有内置方法可以帮到您。但是,您可以查看与您的问题相关的其他帖子:

答案 1 :(得分:1)

Integer.parseInt需要一个字符串,但它需要一个字符串格式的数字。

(2+2)是一个字符串,无法计算2+2。因此,尝试转换非数字值将无法正常工作。 ()+是非数字值

<强>更新

根据我的研究,您可以使用built-in Javascript engine

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;

public class Main {
  public static void main(String[] args) throws ScriptException {
    String str = "2+2";
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    System.out.println(engine.eval(str));
    } 
}