Java 有效数字上的NumberFormatException

Java 有效数字上的NumberFormatException,java,Java,我一直在日志中看到这一点,但据我所知,这种情况应该是不可能的 java.lang.NumberFormatException: For input string: "1487832810" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.7.0_80] at java.lang.Long.parseLong(Long.java:430)

我一直在日志中看到这一点,但据我所知,这种情况应该是不可能的

java.lang.NumberFormatException: For input string: "1487832810"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.7.0_80]
        at java.lang.Long.parseLong(Long.java:430) ~[na:1.7.0_80]
        at java.lang.Long.parseLong(Long.java:483) ~[na:1.7.0_80]
(我认为)相关的源代码(行号与ST匹配)

424:charfirstchar=s.charAt(0);
425:if(firstChar<'0'){//可能的前导“+”或“-”
426:if(firstChar=='-'){
427:负=真;
428:极限=长最小值;
429:}else if(firstChar!='+'))
430:为输入字符串抛出NumberFormatException.forInputString;
因此,它认为第一个字符(
1
)是
<0'

我只能假设这是某种字符编码问题


有什么想法吗?

我想这是因为您的字符串中有不可打印的字符。所有不可打印的字符都是
<0'
。您可以在这里看到哪些是可打印的,哪些不是:

这就是您无法在输出中看到引发异常的字符的原因

如果您不想为这些情况引发异常,则必须更准确地进行比较,例如检查
If
语句中的这些字符或使用正则表达式。无论如何,要替换这些字符,有几个问题,例如:


可能在
1
之前有一个不可打印的字符?您能记录您呼叫的
Long.parseLong
号码的长度吗?它不是if“1tail-我通过
vi
检索了完整的ST,它在数字之前显示了一大堆
^@
。回答正确呃。现在我得找出这些魔咒是从哪里来的。谢谢。
424:    char firstChar = s.charAt(0);
425:    if (firstChar < '0') { // Possible leading "+" or "-"
426:        if (firstChar == '-') {
427:            negative = true;
428:            limit = Long.MIN_VALUE;
429:        } else if (firstChar != '+')
430:            throw NumberFormatException.forInputString(s);