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“10”因为该方法还有另一部分。它可能是一个隐藏字符。为什么在显示错误时在字符串前后加引号。字符串可能是“1487832810”吗。只是问一下。显示字符串的长度并让我们知道。或者至少打印出字符串的第一个字符,@gRaWEty good theory,但添加了这些引号。OP中的输出来自tail
-我通过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);