2017-05-24 1 views
0

Ich habe die folgende Bedingung, die aus zwei Bedingungen mit oder perator enthält. So werden im folgenden Code ich diesen Fehler java.lang.NumberFormatException: For input string: "" dachte ich bin immer die zweite Bedingung in der if-Anweisung in Java, wenn die erste Bedingung nicht gültig geprüft ist.Die zweite Bedingung in der if-Anweisung mit oder operator

Die compressDuration könnte leer oder null oder leer sein oder ein String vlaue wie 100.

Im Fall unterhalb der compressDuration ist leer auch ist es leer auch die zweite Bedingung Integer.parseInt(compressDuration.trim()) nicht geprüft werden muss?

Wie kann ich schreibe das, wenn statment empty or null or blank or a String vlaue like 100. die 4 Fälle conver?

String compressDuration = ""; 
    if(StringUtils.isBlank(compressDuration) || Integer.parseInt(compressDuration.trim())){ 
    System.out.println("The compressDuration has no value or a "); 

    }else{ 

    } 
+2

Haben Sie versucht, dieses zu debuggen? – f1sh

+3

Der von Ihnen gepostete Code wird nicht kompiliert. Sie können ein "int" nicht als Operand von binär ODER übergeben. Möglicherweise führen Sie eine frühere Version des Codes aus, der die Kompilierung bestanden hat, und löst die von Ihnen erwähnte Ausnahme aus. – Eran

Antwort

1

Ich dachte, in Java die zweite Bedingung in der if-Anweisung, wenn die erste Bedingung nicht gültig ist, wird geprüft.

Ich nehme an, Sie meinen nicht geprüft, ob die erste Bedingung falsch ist. Und das stimmt, ist es nicht. Also klar, StringUtils.isBlank gibt nicht zurück false für ""wenn was in Ihrer Frage ist ein gültiges Beispiel für das, was Sie tun.

Ich vermute aber, dass Sie eine Zeichenfolge mit Leerzeichen in es haben, nicht "". Beachten Sie, dass Sie trim verwenden, wenn sie Integer.parseInt vorbei, aber nicht beim Passieren zu StringUtils.isBlank.

Beachten Sie, dass als Eran pointed out, Ihren Code nicht kompiliert; int kann nicht mit dem Operator || verwendet werden, aber Ihr Code hat die Bedingung boolean || int, die der Idee, dass dieser Code keine genaue Darstellung dessen ist, was Sie tatsächlich haben, Gewicht verleiht.

Aber ich vermute, es ist die trim in dem einen Fall die andere aber nicht, was das Problem ist.

Vielleicht:

String compressDuration = /*...get it from wherever...*/; 
compressDuration = compressDuration.trim(); 
int duration; 
if (StringUtils.isBlank(compressDuration) || (duration = Integer.parseInt(compressDuration.trim())) < 0) { 
    System.out.println("The compressDuration has no value or a value less than zero"); 
} else { 
    System.out.println("The compressDuration is " + duration); 
} 

oder wenn man so will Nebenwirkungen nicht in if Bedingungen (und es gibt gute Gründe, sie nicht mögen, aber ich mache einige Ausnahmen für sehr einfache Fälle):

String compressDuration = /*...get it from wherever...*/; 
compressDuration = compressDuration.trim(); 
int duration = StringUtils.isBlank(compressDuration) ? -1 : Integer.parseInt(compressDuration.trim(); 
if (duration < 0) { 
    System.out.println("The compressDuration has no value or a value less than zero"); 
} else { 
    System.out.println("The compressDuration is " + duration); 
} 
+0

Ja, Sie haben Recht nicht überprüft! Gibt es eine Möglichkeit, die Prüfung in einem Fall durchzuführen, wenn die Fälle für? Ich schreibe den Code im groovigen Skript. – tree

0

Versuchen Sie isInt Methode, die True zurückgibt, wenn es gültige Ganzzahl ist.

if(!isInt(compressDuration.trim())) { 
    System.out.println("The compressDuration has no value or a "); 
} else{ 

} 

public boolean isInt(String str) { 

    try{ 
    int num = Integer.parseInt(str); 
    // is an integer! 
} catch (NumberFormatException e) { 
    // not an integer! 
    return false; 
} 
    return true; 
} 
+0

* "@ Baum, bitte sehen Sie diese Antwort" * Die Person, die die Frage bekannt gibt, wird über jede gepostete Antwort informiert, es gibt keine Notwendigkeit, sie zu @ -pingen. –