有效字符串的NumberFormatException

时间:2012-11-07 03:34:24

标签: java numberformatexception

这是我的下面的代码,它将字符串转换为long数据类型。

/**
     * Parses a String into primitive long
     * @param str
     * @return
     */
public static long parseLong(String str){
        try {
            long result = Long.parseLong(str);
            return result;
        } catch(NumberFormatException ex){
            //do nothing or log it
            return 0L;
    }
}

但对于此字符串2006-09-11 22:01:13,无论何时将其传递给上述parseLong方法,我总是会遇到此异常 -

java.lang.NumberFormatException: For input string: "2006-09-11 22:01:13"

我需要转换String to Long。在这种方法中,可以传递任何类型的String。因此,当我调试代码时,我发现它正在为此字符串"2006-09-11 22:01:13"抛出异常。据我所知,它不应该抛出异常吗?因为我们可以使用Long.parseLong方法将任何字符串转换为long吗?

任何人都可以解释为什么我会得到这个例外吗?我现在很困惑..: - /

3 个答案:

答案 0 :(得分:1)

因为您的日期String不是Long或开头的数字。您希望使用SimpleDateFormat将日期字符串解析为有效的Date对象。

答案 1 :(得分:1)

具有特殊字符的字符串无法直接解析为long或int。如果要将其解析为long或任何类型,请首先使用("")替换特殊字符。

或者如果你想将上面的字符串解析为日期,那么使用simpleDate格式就像这样

SimpleDateFormat parser= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
java.util.Date d = null;

try {
    d = parser.parse(str);
            System.out.println("Parsed date is "+d);
} catch (java.text.ParseException e) {
    e.printStackTrace();
}

然后输出将是 Parsed date is Mon Sep 11 22:01:13 IST 2006

答案 2 :(得分:0)

它必须是字符串中保存的精确整数。例如“12345676”只不过是一个数字。 “2006-09-11 22:01:13”包含的内容比“ - ”(连字符),“:”(冒号),“”(空格)等数字更多,不是数字。