Was ist besser - Integer.parseInt () und Ausnahme abfangen oder String mit Muster vor der Konvertierung überprüfen? [Duplikat]

8

Ich habe zwei Stile gesehen, um zu überprüfen, ob eine Variable eine gültige Ganzzahl in Java ist. Eins, indem Sie Integer.parseInt ausführen und eine resultierende Ausnahme abfangen. Ein anderes ist mit Hilfe von Pattern. Welcher der folgenden Ansätze ist besser?

%Vor%

oder

%Vor%

Bearbeiten: Meine Frage hier ist, macht eine Integer.parseInt() und eine Ausnahme für die Validierung einen Standard Weg zu einem int validieren? Ich gebe zu, dass meine Regex nicht perfekt ist. Aber gibt es in Java eingebaute Methoden zur Validierung von int? Ist es nicht besser, etwas zu validieren, anstatt einfach die Ausnahme zu fangen?

    
afxgx 13.06.2013, 11:06
quelle

4 Antworten

8

Die obige Vorgehensweise ist besser, da alle möglichen Fehler berücksichtigt werden und alle Fälle behandelt werden. Zum Beispiel wird das, was Sie geschrieben haben, negative Zahlen nicht korrekt analysieren.

Es macht nur Sinn, einen eigenen Verifier zu schreiben, wenn Sie eine bestimmte Teilmenge aller ganzen Zahlen validieren wollen.

Ein allgemeiner Hinweis: erfinden Sie das Rad nicht neu, es sei denn, Sie haben starke Gründe dafür.

    
Ivaylo Strandjev 13.06.2013 11:07
quelle
4

Es gibt einen wirklich guten Grund, nicht mit dem zweiten Ansatz zu gehen, wenn Sie tatsächlich überprüfen wollen, ob der angegebene String als 32-Bit-Integer dargestellt werden kann und nicht nur, dass er eine ganze Zahl im mathematischen Sinne darstellt.

Ich bin mir sicher, wir sind uns alle einig, dass 2147483648 (2 ** 31 für diejenigen, die darauf achten) eine vollkommen feine ganze Zahl ist, aber es ist nur eine von unendlich vielen Zahlen, für die die beiden Optionen unterschiedliche Ergebnisse ergeben. Wenn Sie also überprüfen möchten, ob Sie eine Zeichenkette als 32-Bit-Integer darstellen können, verwenden Sie die parseInt -Methode, wenn Sie nur sehen wollen, ob es eine Ganzzahl ist, die mit der Regex verknüpft ist.

PS: Das heißt, Ausnahme nicht abfangen, sondern die richtige NumberFormat Ausnahme.

    
Voo 13.06.2013 11:40
quelle
3

Diese beiden Funktionen dienen verschiedenen Zwecken. Wenn Sie nur sicherstellen möchten, dass die Zeichenfolge ein bestimmtes Muster enthält, verwenden Sie die zweite Methode. Wenn Sie es konvertieren müssen, dann sollten Sie parseInt() In diesem Fall wäre es nicht sinnvoll, es zu überprüfen und zu konvertieren.

Wenn Sie jedoch spezifische Anforderungen für die Nummer haben, müssen Sie diese möglicherweise zuerst überprüfen, da parseInt() möglicherweise nicht immer eine Ausnahme auslöst, wenn sie etwas analysieren kann, das Ihren Anforderungen noch nicht entspricht.

    
Devolus 13.06.2013 11:07
quelle
-1

Wenn Sie nur eine Ganzzahl validieren, denke ich, dass der zweite Weg besser ist.

Diese beiden Methoden werden beide gut funktionieren, aber offensichtlich einen anderen Fokus haben. Ersteres konzentriert sich auf die Transformation selbst, während letzteres deutlich mehr Aufmerksamkeit erfordert. Und du willst eine Nummer überprüfen, also finde ich die zweite Methode besser. Auch denke ich, einige der zweiten Methode besser lesbar, die Code-Wartung erlaubt ist klar zu sehen, wo die Logik in der Überprüfung der Gültigkeit einer Zahl anstelle einer Zeichenfolge in eine Zahl ist.

    
Leader Ni 13.06.2013 11:14
quelle

Tags und Links