Java Integer.parseInt() Funktioniert Nicht für Große Zahlen
Habe ich die folgende einfache Stück code, das dazu bestimmt ist, zu erkennen, dass eine bestimmte IPv4-Adresse in der Tat nur mit numerischen Werten (das ist nachdem die Punkte abgezogen):
import edu.gcc.processing.exceptions.net.IPAddressNumericException;
//Get the IP address
String address = "239.255.255.255";
//Check to see if this is a number
try {
String IPNumbers = address.replace(".", "");
Integer.parseInt(IPNumbers);
} catch (NumberFormatException e) {
System.out.print(e.getMessage());
}
Aus irgendeinem Grund, das NumberFormatException
gefeuert, und ich bekomme diese Fehlermeldung:
For input string: "239255255255"
Könnte mir bitte jemand helfen das verstehen? Die parseInt()
Methode funktioniert auf kleinere zahlen, wie 127001
.
Vielen Dank für Ihre Zeit.
- Naja, "was ist der Wertebereich einer integer"? (Und warum kann ich diese Frage gestellt wird? 🙂
- Vielleicht möchten Sie sich in eine regex stackoverflow.com/questions/46146/...
- Ja, das ist es. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen Sie es mit
Long.parseLong(IPNumbers)
Warum nicht einen regulären Ausdruck verwenden, oder brechen Sie in seine Komponenten durch Verwendung
split(".")
?Gibt es weitere Einschränkungen außer, dass zu bestehen ausschließlich aus Ziffern. Zum Beispiel:
Diese analysieren nur gut, sondern ist ein... unwahrscheinlich, IP.
Brechen es in seine Teile können Sie bestimmen, (a) dass es hat vier Teile, und (b) dass jedes Teil tatsächlich sinnvoll ist, im Rahmen einer IP-Adresse.
Könnten Sie auch einen
InetAddress
Umsetzung, oderInetAddressValidator
von Apache Commons.Für sehr große zahlen, die Sie verwenden möchten, können Sie die BigInteger Klasse (oder BigDecimal), wie die Werte können über die Grenzen von Integer.
Integer-Grenzen:
Mit BigInteger:
239255255255 ist zu groß gehalten werden, durch eine ganze Zahl. Versuchen Sie es mit einem BigInteger oder BigDecimal.
Bereich der
Integer
ist -2,147,483,648 zu 2,147,483,647, die Nummer, die Sie haben oben erwähnt, ist nicht enthalten in diesen Bereich, so verwenden Sielong
, den Bereich derlong
primitiver Typ ist in zwischen -9,223,372,036,854,775,808 und 9,223,372,036,854,775,807.Also für deinen Fall ist es besser, verwenden Sie
Long.parseLong()
- Funktion konvertieren eine so große Zahl anlong
geben.Den logischen Schritt von ein integer ist ein lange