Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我能';t我将字符串转换为“;(2&"x2B)2";到整数(java)?_Java_String_Int_Type Conversion - Fatal编程技术网

为什么我能';t我将字符串转换为“;(2&"x2B)2";到整数(java)?

为什么我能';t我将字符串转换为“;(2&"x2B)2";到整数(java)?,java,string,int,type-conversion,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); } } 为什么不起作用?我还可以定义intx=(2+2)没有

我想将字符串转换为整数,但它不起作用。我认为问题在于字符串不是“干净的”,请参见以下示例:

public class Test{
    public static void main(String[] args){
        String str = "(2+2)";
        int conv = Integer.parseInt(str);
        System.out.println(conv);
    }
}
为什么不起作用?我还可以定义
intx=(2+2)没有任何问题

这里的问题到底是什么?有没有简单的解决方法


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

为什么不起作用

由于此处的某些无效字符,
字符串
无法解析为整数:

"(2+2)"
使用
Integer.parseInt
无法解析无效字符,例如
+
。但是,当
+
是唯一使用的字符并且是前导符号时,它是有效的,即

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

有没有简单的方法来解决这个问题

没有内置的方法为您执行此操作。但是,您可以查看与您的问题相关的其他帖子:


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

(2+2)
是一个字符串,它不能计算
2+2
。因此,尝试转换非数值将不起作用<代码>()和
+
是非数值

更新:

根据我的研究,你可以使用


Java没有能够做到这一点的内置代码。
parseInt
意味着获取一个作为数字的字符串并将其转换为这个数字。Integer.parseInt()需要一个字符串形式的数字,所以“5”、“100”等都可以,因为它们是整数。它不能处理像“1.1”、“1”和“(2+2)”这样的非整数字符串值,因此您可以使用专用库,如mXparser-如果您只需删除
+
)和
,请遵循教程,您将得到
“22”
,这将解析为数字
22
,这显然是错误的,因为表达式的计算结果应该是数字
4
@Andreas,所以我不是指解析表达式。。。。这是问题的一部分,这里的问题到底是什么,我回答了。这里的问题不是字符串是无效的整数值,而是
parseInt()
方法不是表达式计算器。--哦,还有坏链接!!因此,我说您不能解析无效字符,比如()和+。这意味着我指的是
parseInt()
。如果使用表达式解析器,可以“解析”该字符串。说字符串不能被解析是错误的。如果你说它不能被
parseInt()
解析,你是对的,但你不是这么说的?我不允许导入java eclipse库之外的内容。这是否意味着我必须自己编写代码?@cnmesr如果你阅读重复链接中给出的答案,你会发现你不需要添加任何库,也不需要自己编写。@cnmesr请参阅更新的代码“the
(2+2)
是一个字符串,它不能计算
2+2
”你是对的,“字符串”不能计算任何东西。这只是一根绳子如果用作前导符号,
+
也可以是数值的一部分。
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));
    } 
}