Wie kann ich java.lang.NumberFormatException verhindern: Für Eingabezeichenfolge: "N / A"? [geschlossen]


77

Während ich meinen Code ausführe, erhalte ich Folgendes 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)`

Wie kann ich verhindern, dass diese Ausnahme auftritt?


Antworten:


91

"N/A"ist keine ganze Zahl. Es muss werfen, NumberFormatExceptionwenn Sie versuchen, es auf eine Ganzzahl zu analysieren.

Überprüfen Sie dies vor dem Parsen oder behandeln Sie es Exceptionrichtig.

  1. Ausnahmebehandlung

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

oder - Integer Pattern Matching -

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

1
Danke Suresh für die Bearbeitung :)
— Subhrajyoti Majumder

1
Ja, Sie haben Recht. Ich habe vergessen, es einem ganzzahligen Wert zuzuweisen. Jetzt habe ich den Fehler erhalten und ja, er wurde erfolgreich behoben. Danke
— codemaniac143

+1 für die Ganzzahlmusterübereinstimmung. Ich war mir nicht sicher, wie ich eine Schleife machen sollte, um eine Zeile von stdin mit einem try / catch zu lesen.
— Jason Hartley

@ JasonHartley, bitte überprüfen Sie die Antwort. Ich habe es bearbeitet und erklärt, warum Sie es nicht vorziehen würden, in Ihrem Code einen Ganzzahlmusterabgleich zu verwenden.
— LPVOID

Wie man eine Ganzzahl aus dieser Art von Zeichenfolge "151564" in doppelten Anführungszeichen erhält
— Zeeshan Ali

7

Machen Sie einen Ausnahmebehandler wie folgt:

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

.
.
.
.

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

5

Offensichtlich können Sie nicht N/Anach intWert analysieren . Sie können so etwas wie das Folgende tun, um damit umzugehen NumberFormatException.

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

Ja, es war ein Fehler dieser Art. Vielen Dank für Ihre Hilfe
— codemaniac143

4

Integer.parseInt (str) wirft , NumberFormatExceptionwenn die Zeichenkette nicht eine ganze Zahl parsable enthält. Sie können das gleiche wie unten hadle.

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

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

Ja, es war ein Fehler dieser Art. Vielen Dank für Ihre Hilfe
— codemaniac143

2

"N / A" ist eine Zeichenfolge und kann nicht in eine Zahl konvertiert werden. Fangen Sie die Ausnahme ab und behandeln Sie sie. Zum Beispiel:

    String text = "N/A";
    int intVal = 0;
    try {
        intVal = Integer.parseInt(text);
    } catch (NumberFormatException e) {
        //Log it if needed
        intVal = //default fallback value;
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.