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.