我正在尝试解析字符串表达式(即“6+10*2-5”)并使用 for-case 语句将答案计算为 double 值。但是我收到错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at Calculator.random(Calculator.java:50)
at Calculator.main(Calculator.java:210)
有什么想法吗?
public static double random(String exp) {
double primeResult = 0;
for (int i=0; i<exp.length();i++) {
double left = Integer.parseInt(exp.substring(0,i));
double right = Integer.parseInt(exp.substring(i+1,i+2));
switch(exp.charAt(i)) {
case '*':
primeResult = left * right;
break;
case '/':
primeResult = left / right;
break;
case '+':
primeResult = left + right;
break;
case '-':
primeResult = left - right;
break;
default:
return 0;
}
System.out.println(primeResult);
}
return primeResult;
}
}
最佳答案
您的问题与switch
/case
无关。问题很简单,您正试图将一个空字符串解析为一个数字。找出为什么你有一个空字符串,然后修复它。 (提示:您希望 exp.substring(0, 0)
返回什么?)
您还应该考虑当 i
为 exp.length() 时您期望
(甚至 exp.substring(i+1,i+2)
返回什么 - 1exp.length() - 2
)。
此外,退后一步,考虑为什么您认为这是 switch
/case
部分的问题。查看堆栈跟踪 - 它甚至不在 switch
/case
语句中,而是在它之前。能够诊断实际发生错误的位置非常重要,这样您就可以专注于此,而不会被不相关的部分分心。
关于java.lang.NumberFormatException : For input string: "" parsing string expression 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16721552/