这是我的代码:
import java.util.ArrayList;
public class SplitString
{
public static void main(String[] args)
{
String s = "80+5+3*(11%(3*2)-(5+1)+6)-(10+10)+(2*2)*5";
ArrayList<String> equation = new ArrayList<>();
String ns = "";
String b;
int nsi;
for(int c=0; c<s.length(); c++)
{
b = s.substring(c,c+1);
switch (b) {
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
ns += b;
break;
case "+":
case "-":
case "*":
case "/":
case "%":
case "(":
case ")":
nsi = Integer.parseInt(ns);
equation.add(Integer.toString(nsi));
equation.add(b);
ns = "";
break;
}
for(int i=0; i<equation.size(); i++)
{
System.out.print(equation.get(i));
}
}
}
}
我试图将字符串分成单独的数字和 ArrayList
中的运算符,这样如果输入了像 00080
这样的数字,它将把数字假设为 80
. 但是我遇到了麻烦,当我运行它时它给了我:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
80+80+80+5+80+5+80+5+3*
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at stringequationfull.StringEquationFull.main(StringEquationFull.java:42)
Java Result: 1
我究竟做错了什么?
2 回答
您正在尝试将空字符串解析为int;因此例外 . 你处理运营商的逻辑是错误的 . 您的代码假设操作符之间总是有一个数字,但如果您查看等式,显然不是这种情况 . (查看括号的出现 . )引发异常是因为,如消息所示,
ns
是空字符串 .您将需要开发更通用的解析逻辑 . 在网上搜索"parse equation java",了解有关如何执行此操作的大量示例 . 如果您只想要评估方程式,请查看this thread或this one .
nsi = Integer.parseInt(ns);
将throw:调试你的代码,你会看到
ns
doesn't 包含一个可解析的整数 . (提示:它是空的)提示:stack trace信息非常丰富,您可以轻松了解问题发生的位置以及问题发生的原因 . 一个简单的调查将引导您解决问题 . 在这种情况下,它是从parseInt(Class Integer)抛出的异常,您可以看到该方法的良好文档 . 这将帮助您找到问题所在 .