【问题标题】:Exception : java.lang.NumberFormatException When convert String to long异常:java.lang.NumberFormatException 将 String 转换为 long
【发布时间】:2013-09-01 19:27:59
【问题描述】:

我正在将具有“1520056800”的字符串转换为 long 以具有日期。但我得到 NumberFormatException 来转换它

请帮帮我。

long expiryDateMS = Long.parseLong(responseArray[0].replaceAll(" ", ""));
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");
Date date = new Date(expiryDateMS);

堆栈跟踪

09-02 00:52:28.984: E/AndroidRuntime(12025): Caused by: java.lang.NumberFormatException: 1520056800
09-02 00:52:28.984: E/AndroidRuntime(12025):    at java.lang.Long.parse(Long.java:353)
09-02 00:52:28.984: E/AndroidRuntime(12025):    at java.lang.Long.parseLong(Long.java:344)
09-02 00:52:28.984: E/AndroidRuntime(12025):    at java.lang.Long.parseLong(Long.java:311)
09-02 00:52:28.984: E/AndroidRuntime(12025):    at com.example.astrill_openvpn.MainOnOffActivity.onCreate(MainOnOffActivity.java:99)
09-02 00:52:28.984: E/AndroidRuntime(12025):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-02 00:52:28.984: E/AndroidRuntime(12025):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)

【问题讨论】:

  • 我 100% 确定你的字符串中有一些无效的不可打印(所以你看不到它)字符,如果我使用 long expiryDateMS = Long.parseLong("1520 056800 ".replaceAll(" ", "")); 它可以工作,所以请检查 responseArray[0]内容
  • @BackSlash 我已经检查了内容..它的1520056800
  • 这也是我的猜测!也许一些你看不到的cr lf
  • 也许你应该把你的链式调用分成两个语句,这样你就可以看到你要解析的内容。你知道,通过组合它们不会节省任何东西。但是你大大增加了调试难度。
  • @Android 重新检查我的评论,我说 invalid non-printable (so you don't see it) 循环遍历你的字符串并打印每个字符。或者只是打印responseArray[0].replaceAll(" ", "").length(),如果它输出的内容大于10,则说明其中包含无效字符。

标签: java


【解决方案1】:

字符串中可能有不可见或无效的字符。 请尝试this post 了解更多详情。

【讨论】:

    【解决方案2】:

    这段代码应该可以完成这项工作。所以我猜你有一些编码/特殊字符问题。试试这个来验证你有一个真正的 ASCII 编码数字:

    String str = responseArray[0].replaceAll(" ", "");
    for (int i = 0; i < str.length(); ++i)
    {
        char a = str.charAt(i);
        if (!('0' <= a && a <= '9')) System.out.println(a + " is not a valid digit!");
    }
    

    【讨论】:

    • 我查了一下,str是1520056800。我认为这里的每个数字都是有效数字
    • 我正在使用这个SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");,然后它显示日期1970-44-18..它错了。请帮忙解决
    • 改用yyyy-MM-ddmm 是分钟。 MM 是月份。
    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 2018-05-29
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2021-10-08
    • 2014-11-13
    相关资源
    最近更新 更多