Làm cách nào để ngăn chặn java.lang.NumberFormatException: Đối với chuỗi đầu vào: “N / A”? [đóng cửa]


80

Trong khi chạy mã của mình, tôi nhận được 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)`

Làm cách nào để ngăn ngoại lệ này xảy ra?


Câu trả lời:


93

"N/A"không phải là một số nguyên. Nó phải ném NumberFormatExceptionnếu bạn cố gắng phân tích cú pháp nó thành một số nguyên.

Kiểm tra trước khi phân tích cú pháp hoặc xử lý Exceptionđúng cách.

  1. Xử lý ngoại lệ

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

hoặc - Đối sánh mẫu số nguyên -

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

1
Cảm ơn Suresh để chỉnh sửa :)
Subhrajyoti Majumder

1
Có bạn là đúng tôi quên gán nó vào giá trị số nguyên bây giờ tôi đã nhận lỗi và có nó được giải quyết thành công cảm ơn bạn
codemaniac143

+1 cho đối sánh mẫu số nguyên. Tôi không chắc làm thế nào để thực hiện một vòng lặp đọc một dòng từ stdin bằng cách sử dụng thử / bắt.
Jason Hartley

@JasonHartley, vui lòng xem lại câu trả lời. Tôi đã chỉnh sửa nó và giải thích lý do tại sao bạn không muốn sử dụng đối sánh mẫu số nguyên trong mã của mình.
LPVOID

Làm thế nào để có được số nguyên từ loại chuỗi "151.564" trong dấu ngoặc kép
Zeeshan Ali

7

Tạo một trình xử lý ngoại lệ như thế này,

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

.
.
.
.

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

5

Rõ ràng là bạn không thể phân tích cú pháp N/Athành intgiá trị. bạn có thể làm điều gì đó như sau để xử lý điều đó NumberFormatException.

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

Có nó là một số điều của sai lầm loại này cảm ơn bạn đã giúp đỡ của bạn
codemaniac143

4

Integer.parseInt (str) ném NumberFormatExceptionnếu chuỗi không chứa số nguyên có thể phân tích cú pháp. Bạn có thể có bánh răng giống như bên dưới.

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

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

Có nó là một số điều của sai lầm loại này cảm ơn bạn đã giúp đỡ của bạn
codemaniac143

2

"N / A" là một chuỗi và không thể chuyển đổi thành số. Nắm bắt ngoại lệ và xử lý nó. Ví dụ:

    String text = "N/A";
    int intVal = 0;
    try {
        intVal = Integer.parseInt(text);
    } catch (NumberFormatException e) {
        //Log it if needed
        intVal = //default fallback value;
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.