首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.lang.NumberFormatException:对于输入字符串:"“解析字符串表达式

java.lang.NumberFormatException:对于输入字符串:"“解析字符串表达式
EN

Stack Overflow用户
提问于 2013-05-24 02:43:12
回答 2查看 2.3K关注 0票数 1

我正在尝试解析一个字符串表达式(即"6+10*2-5"),并使用for-case语句计算出双精度值。然而,我得到了一个错误:

代码语言:javascript
运行
复制
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)

有什么想法吗?

代码语言:javascript
运行
复制
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;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2013-05-24 02:44:49

您的问题与switch/case无关。问题很简单,您试图将一个空字符串解析为一个数字。弄清楚为什么会有一个空字符串,然后修复它。(提示:您希望exp.substring(0, 0)返回什么?)

您还应该考虑当iexp.length() - 1 (甚至是exp.length() - 2)时,您期望exp.substring(i+1,i+2)返回什么。

另外,后退一步,考虑一下为什么您认为这是switch/case部件的问题。看看堆栈跟踪-它甚至不在switch/case语句中,而是在它之前。能够诊断错误实际发生的位置是非常重要的,这样你就可以专注于此,而不会被不相关的部分分散注意力。

票数 8
EN

Stack Overflow用户

发布于 2013-05-24 03:03:39

Jon Skeet已经用非常好的诊断训练回答了你的问题。

但是..。我确实认为你的问题解决方案不会奏效。

如果您在心理上跟踪您的代码,假设输入了正确的"5+5",那么您的循环将做的第一件事是:

代码语言:javascript
运行
复制
double left = Integer.parseInt(exp.substring(0,i));
double right = Integer.parseInt(exp.substring(i+1,i+2));

对于i==0 (第一次循环),这将转换为:

代码语言:javascript
运行
复制
double left = Integer.parseInt(exp.substring(0,0));
double right = Integer.parseInt(exp.substring(0+1,0+2));

这将立即为exp.substring(0,0)获得一个“空字符串”,从而抛出您的问题中的异常。

哦,如果你在计算一个表达式,为什么你的函数被称为“随机”呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16721552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档