从字符串到整数的转换中的Java数字格式异常[重复]

Posted

技术标签:

【中文标题】从字符串到整数的转换中的Java数字格式异常[重复]【英文标题】:Java Number Format Exception in Conversion from String to Integer [duplicate] 【发布时间】:2018-04-27 18:48:53 【问题描述】:

以下程序使用日期和时间生成唯一密钥(使用 joda time API)

import org.apache.commons.codec.binary.Base64;
import org.joda.time.*;

public class EnDecoding 


    public String EncodeRecieverAddress(String emailaddress)
        byte[] encodedBytes = Base64.encodeBase64(emailaddress.getBytes());
        return new String(encodedBytes);
    

    public String DecodeRecieverAddress(String encodedemail)
        byte[] decodedBytes = Base64.decodeBase64(encodedemail.getBytes());
        return new String(decodedBytes);
    

    public int GenerateUniquekey() 
        LocalTime localtime = new LocalTime();
        LocalDate localdate = new LocalDate();
        String  key = "" + localdate.getDayOfYear()   
                    + localdate.getDayOfMonth()
                    + localdate.getDayOfWeek()
                    + localtime.getHourOfDay()
                    + localtime.getMinuteOfHour()
                    + localtime.getSecondOfMinute()
                    + localtime.getMillisOfSecond();
        System.out.println(key);
        System.out.println(Integer.parseInt(key.trim()));
      return 0;
    

System.out.println(key);

输出:117275232750437

System.out.println(Integer.parseInt(key.trim()));

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

我使用 id.trim() 函数来消除前导和尾随空格,但这也不能解决我的问题。

请不要将此问题标记为重复,因为其他类似的问题对我没有多大帮助,这就是我创建这个新问题的原因,所以我希望在这里得到最好的答案。

【问题讨论】:

整数太大,无法存储 但是当我将它存储在长数据类型变量上时它也给了我同样的错误 Long 对我来说效果很好。 这是一种非常奇特的生成所谓唯一密钥的方法。对于更简单、更标准的东西,我建议 UUIDSystem.currentTimeMillis() 或只是一个不断递增的计数器。 这不是在long、@burhanuddinabbas 中存储它的问题。你也需要使用Long.parseLong() 【参考方案1】:

使用Long 而不是整数,因为它超出了Integer 的范围

  String s = "117275232750437";
  System.out.println(Long.parseLong(s));
整数范围:-2,147,483,648 到 2,147,483,647 长距离:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

【讨论】:

太棒了!!!很高兴为您提供帮助。【参考方案2】:

整数的最大值是 2,147,483,647,你的输入太大了。请改用Long

【讨论】:

我已经尝试过 Long 数据类型,它给了我同样的异常 Long.parseLong("117275232750437") 似乎对我来说工作得很好。您确定这是您要解析的字符串的确切内容吗? 谢谢,我的问题现在解决了。顺便问一下,数据类型的范围是否取决于处理器架构,如 32 位或 64 位? 太好了,很高兴您的问题得到解决,如果对您有帮助,请标记答案,以便其他人看到此问题已得到解答。关于处理器架构 - 32 位和 64 位原语的数据范围相同,这里对操作的原子性提出了一些有趣的想法:***.com/q/9511836/5362510 Java int 是 32 位,无论它运行在哪个处理器上。同样,long 始终是 64 位,独立于底层处理器。【参考方案3】:

您的号码太大,您应该使用Longint 的最大值为 2.147.483.647。

【讨论】:

以上是关于从字符串到整数的转换中的Java数字格式异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将字符(数字)转换为整数的“java”方式是啥[重复]

java中怎么把一个字符串中的数字抽出来转化成日期格式

Java - 将整数转换为字符串[重复]

在正则表达式中匹配字符串中的数字并转换为整数[重复]

文件中的两个字符串,将它们转换为整数然后从另一个中减去一个整数

Java中的自定义异常捕获方式