有效数字的NumberFormatException

时间:2017-02-27 06:59:40

标签: 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) ~[na:1.7.0_80]
        at java.lang.Long.parseLong(Long.java:483) ~[na:1.7.0_80]

here is(我认为)相关的源代码(行号与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);

因此,它认为第一个字符(1)是< '0' ??

我只能假设这是一些字符编码问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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

http://web.itu.edu.tr/sgunduz/courses/mikroisl/ascii.html

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

如果您不想为这些案例抛出异常,则必须更准确地进行比较,例如在if语句中检查这些字符或使用正则表达式。无论如何,在SO中有几个问题可以替换这些字符,例如:

Fastest way to strip all non-printable characters from a Java String

How can I replace non-printable Unicode characters in Java?