2016-09-07 3 views
1

Ich brauche meinen Code, um wahr zurückzugeben, wenn der Parameter die String-Darstellung einer Ganzzahl zwischen 0 und 255 ist (einschließlich 0 und 255), ansonsten falsch.parseInt vs isDigit

Zum Beispiel: Strings "0", "1", "2" .... "254", "255" sind gültig.

Gepolsterte Strings (wie "00000000153") sind ebenfalls gültig.

isDigit würde anscheinend auch funktionieren, aber ich fragte mich, ob das günstiger wäre und/oder das sogar mit Padded Strings funktionieren würde?

public static boolean isValidElement(String token) { 
    int foo = Integer.parseInt("token"); 
    if(foo >= 0 && foo <= 255) 
     return true; 
    else 
     return false; 
    } 
+0

Ihr Code funktioniert nicht? – passion

+2

JavaScript und Java sind zwei völlig verschiedene Sprachen. –

Antwort

2

isDigit nicht funktionieren würde, weil es ein Zeichen als Eingabe und gibt true zurück, wenn es sich um eine Ziffer von 0 bis 9 ist [Referenz: isDigit javadoc]

Da in Ihrem Fall müssen Sie testen Zeichenfolgedarstellungen aller Zahlen von 0 bis 255, daher müssen Sie parseInt verwenden.

Überprüfen Sie außerdem, ob das übergebene Token eine gültige Zahl ist, indem Sie NumberFormatException abfangen und false zurückgeben, falls es sich nicht um eine gültige Ganzzahl handelt.

public static boolean isValidElement(String token) { 
    try{ 
     int foo = Integer.parseInt(token); 
     if(foo >= 0 && foo <= 255) 
      return true; 
     else 
      return false; 
    } catch (NumberFormatException ex) { 
     return false; 
    } 
} 
+0

Was bedeuten catch und ex in "catch (NumberFormatException ex)"? und warum öffnest du mit Versuch? –

+0

'try' und' catch' sind Java Schlüsselwörter. 'parseInt' wird 'NumberFormatException' ausgeben, wenn es mit Eingaben geliefert wird, die nicht als Ganzzahl analysiert werden können (zum Beispiel 'Integer.parseInt (" randomText ")'). "try-catch" ist eine Syntax, um diese Ausnahme abzufangen und die richtige Sache zu tun, d. h. "false" zurückgeben, da die Eingabe kein gültiges Element ist (keine Darstellung einer Zahl zwischen 0 und 255). Sie können mehr über 'try-catch' im [java offiziellen Lernprogramm] lesen (https://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html) –

0

könnten Sie regex verwenden:

return token.matches("1?\\d{1,2}|2[0-4]\\d|25[0-5]"); 
0

So Integer.parseInt eine Number werfen, wenn die Zeichenfolge keine gültige Zahl ist, nur etwas im Auge zu behalten.

Ich würde NumberUtils.isDigit() aus Commons-Math3-Bibliothek zu überprüfen, verwenden Sie dann Integer.valueOf, die eine effiziente Nummer Parser ist.

if (NumberUtils.isDigit(token)) { 
    int foo = Integer.valueOf(token); 
    return (foo >=0 && foo <=255); 
} 
0

Integer.parseInt wirft einen NumberFormatException wenn die Umwandlung nicht möglich ist. In diesem Sinne können Sie dieses Code-Snippet verwenden. Keine zusätzlichen Abhängigkeiten erforderlich.

public static boolean isValidElement(String token) { 
    try { 
     int value = Integer.parseInt(token); 
     return value >= 0 && value <= 255; 
    } catch(NumberFormatException e) { 
     return false; 
    } 
}