Exception in thread "main" java.lang.NumberFormatException: empty String

2025-03-02 15:04:18
推荐回答(3个)
回答1:

public static void main(String[] args) {
    String s = "牛奶:89.8元,香肠:12.9元,啤酒:69元,巧克力:132元";
    String regex = "[^0123456789.]";
    String digitMess = s.replaceAll(regex, " *");
    StringTokenizer fenxi = new StringTokenizer(digitMess, "*");//【代码 1】创建 fenxi,用*做分隔标记解析 digitMess 中的单词
    int number = 0;//[代码2]fenxi 调用 countTokens()方法返回单词数量 double sum=0;
    double sum = 0;
    while (fenxi.hasMoreTokens()) {
        String str = fenxi.nextToken();//[代码3]fenxi 调用 nextToken()方法返回单词
        double temp = 0;
        try{
            temp = Double.parseDouble(str);
        } catch (Exception e) {
            continue;
        }
        sum = sum + temp;
        number ++;
    }
    System.out.println("购物小票中的商品种类:" + number + "种");
    System.out.println("购物小票中的价格总额:" + sum + "元");
}
报错是因为 Double.parseDouble(str);把str字符串转成double,当str不是数字时,就转换异常了。

回答2:

while循环里的字符串变量str有时为空,Double.parseDouble不能转化空字符串。因为你是相当于把非数字当做分隔符,我们来模拟一下StringTokenizer是怎样分割字符串的:首先读取'牛',发现它被当做分隔符,打印分隔符之前的字符串,没有,就输出空字符串;然后读取‘奶’,同理。因此你如果删掉Double.parseDouble语句执行一下代码,你会发现输出的89.8之前有三个空行,那实际上就是输出空字符串

回答3:

String str = fenxi.nextToken();//[代码3]fenxi 调用 nextToken()方法返回单词
System.out.println(str);
sum = sum + Double.parseDouble(str); // str 返回空,空字符串不能被Double.parse