2013-02-25 2 views
1

Так что я читаю это:Не знаю, почему этот код генерирует исключение NumberFormatException. (Действительный вход)

10011011001;0110,1001,1001,0,10,11 

И работает этот код на нем:

 String[] parts = line.split(";"); 
     System.out.println("Part 1 = " + parts[0]); 
     System.out.println("Part 2 = " + parts[1]); 
     System.out.println(isNumeric(parts[0])); 
     int original = Integer.parseInt(parts[0]); 
     System.out.println("Original = " + original); 

isNumeric метод, что я написал для отладки.

public static boolean isNumeric(String str) { 
    for (char c : str.toCharArray()) { 
     if (!Character.isDigit(c)) { 
      return false; 
     } 
    } 
    return true; 
} 

Выход:

Line = 10011011001;0110,1001,1001,0,10,11 
Part 1 = 10011011001 
Part 2 = 0110,1001,1001,0,10,11 
true 
Exception in thread "main" java.lang.NumberFormatException: For input string: "10011011001" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at str_substitution.main(str_substitution.java:45) 

Понятия не имею, почему это исключение, очевидно, строка является числовым, и действительным.

ответ

6

10,011,011,001 слишком большой, чтобы соответствовать 32-разрядному целому числу.

Возможно, вы имеете в виду использовать long и parseLong()?

Или вы на самом деле означали разбор его как двоичное число (десятичное число 1241) с помощью parseInt(parts[0], 2)?

Here you can check the minimum and maximum values for each Java data type

+0

Я хотел разобрать его как сам int, а теперь, возможно, длинный. –

1

Ваш номер 10 млрд, а число макс для Java примерно -2b - 2b. Таким образом, это невозможно.

Возможно, вы хотите использовать parseInt(String s,int radix), чтобы прочитать его как двоичное число? Или parseLong().

Из Javadoc (пример подобного случая) -

parseInt("2147483648", 10) throws a NumberFormatException 
0

Может быть, вы хотите использовать Long.parseLong() вместо Integer.parseInt()?

Смежные вопросы