无法理解数字格式异常的原因

时间:2012-02-09 11:49:03

标签: java numberformatexception

我写了一个小程序,用户输入分钟,程序显示用户输入的当前日期和时间+分钟。

final String DATE_FORMAT_NOW = "MM/dd/yyyy HH:mm:ss";
final DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.US);

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, Integer.valueOf(sample.getMinutes()));

SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
String dt = sdf.format(cal.getTime());

System.out.println(" Date and time with added Minutes : " + (dateFormat.parse(dt));

示例

private String minutes;

//getter and setter

我收到此异常

  

java.lang.NumberFormatException:对于输入字符串:“”

我在这里做错了什么? 我应该使用

Integer.parseInt

Integer.valueOf(Integer.parseInt(sample.getMinutes())));?

9 个答案:

答案 0 :(得分:1)

检查sample.getMinutes()返回的字符串是否为数字。它必须是没有任何空格才能被解析的数字,否则您将获得NumberFormatException

答案 1 :(得分:1)

  1. 使用当前日期和时间。

    public static void main(String[] args) 
    {
        try 
        {
            final String DATE_FORMAT_NOW = "MM/dd/yyyy HH:mm:ss";
            final DateFormat dateFormat  = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.US);
    
            Date sample  = new Date();
            int iMinutes = 30;//minutes added by the user
    
            Calendar cal = Calendar.getInstance();
    
            cal.add(Calendar.MINUTE, Integer.valueOf(sample.getMinutes()));
    
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
            String dt            = sdf.format(cal.getTime());
    
            System.out.println("Current Date and time:"+sample);
            System.out.println("Date and time with added Minutes : " + (dateFormat.parse(dt)));
        } 
        catch (ParseException ex) 
        {
            Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    

    输出显示为:
    当前日期和时间:2012年6月12日星期二15:57:55 IST 2012 添加日期和时间分钟:2012年6月12日星期二16:54:55 IST 2012年 在这里,分钟“57”被添加到日历中,时间向前移动了“30”分钟。这就是你的结果(添加分钟的日期和时间)。

  2. 用户输入分钟。

    public static void main(String[] args) 
    {
        try 
        {
            final String DATE_FORMAT_NOW = "MM/dd/yyyy HH:mm:ss";
            final DateFormat dateFormat  = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.US);
    
            int iMinutes = 30;//minutes added by the user
    
            Calendar cal = Calendar.getInstance();
    
            cal.add(Calendar.MINUTE, iMinutes);
    
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
            String dt            = sdf.format(cal.getTime());
    
            System.out.println("Current Date and time:"+sample);
            System.out.println("Date and time with added Minutes : " + (dateFormat.parse(dt)));
        } 
        catch (ParseException ex) 
        {
            Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    

    这将按照您的愿望工作,首先您从用户那里获取会议记录并将该分钟分配给代码的“iMinutes”变量,它将为压延机添加这么多分钟。

    输出将显示为:
    当前日期和时间:2012年6月12日星期二16:07:55 IST 2012 添加分钟的日期和时间:2012年6月12日星期二16:37:55

  3. 如果你想设置分钟,那么在“cal.add”中使用“set”而不是“add”。

    希望这能解决您的问题 问候。

答案 2 :(得分:0)

您遇到的问题是空字符串不是有效整数。您的应用程序应该捕获异常,并设置合理的默认值。

答案 3 :(得分:0)

""是一个空字符串,在任何情况下都无法将其解析为有效整数

答案 4 :(得分:0)

  

java.lang.NumberFormatException:对于输入字符串:“”

无法将空字符串解析为数字。

您需要先检查它(使用String#length()或StringUtils#isBlank())并确定如何处理此情况(例如将其视为零)。

答案 5 :(得分:0)

  

java.lang.NumberFormatException:对于输入字符串:“”

好像你从未设置分钟字符串

答案 6 :(得分:0)

java.lang.NumberFormatException:对于输入字符串:“”

输入字符串“”无法转换为有效的整数。

在使用Integer.parseInt之前,确保通过以下方式获取整数。

  

1.提供javascript验证以检查int

或/和

2.提供服务器端验证以检查非整数字符串

另见how to avoid NumberFormatException

答案 7 :(得分:0)

添加某种检查:

final String DATE_FORMAT_NOW = "MM/dd/yyyy HH:mm:ss";
final DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.US);

Calendar cal = Calendar.getInstance();
final String minutes = sample.getMinutes()
cal.add(Calendar.MINUTE, Integer.valueOf((minutes != null && !minutes.isEmpty()) ? minutes : 0);

SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
String dt = sdf.format(cal.getTime());

System.out.println(" Date and time with added Minutes : " + (dateFormat.parse(dt));

答案 8 :(得分:0)

这里没有什么不寻常的。阅读parseInt() and valueOf的java文档,其中明确指出NumberFormatException不包含String时会引发parsable integerempty string ""不是可解析的int。

由您决定如何处理抛出NumberFormatException的情况。