Як я можу запобігти java.lang.NumberFormatException: Для вхідного рядка: “Недоступно”? [зачинено]


80

Під час запуску коду я отримую NumberFormatException:

java.lang.NumberFormatException: For input string: "N/A"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)
    at java.util.TreeMap.compare(Unknown Source)
    at java.util.TreeMap.put(Unknown Source)
    at java.util.TreeSet.add(Unknown Source)`

Як я можу запобігти виникненню цього винятку?


Відповіді:


93

"N/A"не є цілим числом. Він повинен кинути, NumberFormatExceptionякщо ви намагаєтесь проаналізувати його на ціле число.

Перевірте перед синтаксичним розбором або обробкою Exception.

  1. Обробка винятків

    try{
        int i = Integer.parseInt(input);
    } catch(NumberFormatException ex){ // handle your exception
        ...
    }
    

або - Ціле збіг шаблонів -

String input=...;
String pattern ="-?\\d+";
if(input.matches("-?\\d+")){ // any positive or negetive integer or not!
 ...
}

1
Дякую Сурешу за редагування :)
Subhrajyoti Majumder

1
так, ви маєте рацію. Я забув призначити це цілочисельне значення, тепер я отримав помилку, і так, вона вирішена успішно, дякую
codemaniac143

+1 для збігу цілочисельних зразків. Я не був впевнений, як зробити цикл, читаючи рядок з stdin, використовуючи try / catch.
Джейсон Хартлі,

@JasonHartley, будь ласка, переглянь відповідь. Я відредагував його та пояснив, чому ви не вважаєте за краще використовувати цілочисельний зразок у своєму коді.
LPVOID

Як отримати ціле число з цього типу рядка "151564" у подвійних лапках
Зеешан Алі

7

Зробіть такий обробник винятків,

private int ConvertIntoNumeric(String xVal)
{
 try
  { 
     return Integer.parseInt(xVal);
  }
 catch(Exception ex) 
  {
     return 0; 
  }
}

.
.
.
.

int xTest = ConvertIntoNumeric("N/A");  //Will return 0

5

Очевидно , що ви не можете розібрати N/Aдо intзначення. Ви можете зробити щось на зразок наступного, щоб впоратися з цим NumberFormatException.

   String str="N/A";
   try {
        int val=Integer.parseInt(str);
   }catch (NumberFormatException e){
       System.out.println("not a number"); 
   } 

Так, це була якась така помилка, дякую за вашу допомогу
codemaniac143

4

Integer.parseInt (str) викидає, NumberFormatExceptionякщо рядок не містить цілком аналізоване число. Ви можете пройти те саме, що нижче.

int a;
String str = "N/A";

try {   
   a = Integer.parseInt(str);
} catch (NumberFormatException nfe) {
  // Handle the condition when str is not a number.
}

Так, це була якась така помилка, дякую за вашу допомогу
codemaniac143

2

"Недоступно" - це рядок, який не може бути перетворений у число. Влаштуйте виняток і обробіть його. Наприклад:

    String text = "N/A";
    int intVal = 0;
    try {
        intVal = Integer.parseInt(text);
    } catch (NumberFormatException e) {
        //Log it if needed
        intVal = //default fallback value;
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.