在Java中将整数字符串转换为整数时出现NumberFormatException

4

我声明了这个变量:

private String numCarteBancaireValide=String.valueOf(((Integer.parseInt(Config.NUM_CARTE_BANCAIRE_VALIDE)   ) + (Integer.parseInt("0000000000000001"))));
Config.NUM_CARTE_BANCAIRE_VALIDE is a string.

执行后,我收到了以下错误信息:

java.lang.NumberFormatException: For input string: "4111111111111111"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:583)
    at java.lang.Integer.parseInt(Integer.java:615)

请问,您能给一些建议吗?


1
信用卡号码不是整数,也不应该被视为整数;它们是字符串。 - Alex K.
4个回答

4

使用Long.parseLong(),因为您的参数对于Integer来说太大了。(整数的最大值是2147483647)

PS: 使用Integer.parseInt("0000000000000001")也没有多大意义,您可以将其替换为1


1
<\p> 4111111111111111(很可能是Config.NUM_CARTE_BANCAIRE_VALIDE的值)超出了Integer类型的范围。

最好尝试使用:

//if you need a primitive
long value = Long.parseLong(Config.NUM_CARTE_BANCAIRE_VALIDE); 

或者

//if you need a wrapper
Long value = Long.valueOf(Config.NUM_CARTE_BANCAIRE_VALIDE); 

@KhalidKsouri 如果其中一个答案解决了您的问题,请点击绿色复选标记。 - Tilman Hausherr

1
整数的最大值为2147483647。因此,您需要使用Long.parseLong来解析4111111111111111。类似这样:
long l = Long.parseLong("4111111111111111");

顺便提一下:

正如Alex所评论的那样,如果这个数字代表信用卡号码,那么你可以将其视为一个字符串而不是转换为长整数型,因为信用卡号码没有涉及到算术运算。


0

Integer.parseInt 会尝试从 String 中解析一个整数。

您的 "4111111111111111" String 不代表有效的 Java 整数类型,因为它的值将会大于 Integer.MAX_VALUE

请改用 Long.parseLong


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接