从字符串到整数的转换中的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 对我来说效果很好。 这是一种非常奇特的生成所谓唯一密钥的方法。对于更简单、更标准的东西,我建议UUID
或 System.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】:
您的号码太大,您应该使用Long
。int
的最大值为 2.147.483.647。
【讨论】:
以上是关于从字符串到整数的转换中的Java数字格式异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章