W3docs

String in int umwandeln in Java

Java-String in int umwandeln mit Integer.parseInt und Integer.valueOf, und NumberFormatException behandeln.

Text wie "42" in die Zahl 42 umzuwandeln, gehört zu den häufigsten Aufgaben in Java — sie begegnet einem immer wieder beim Lesen von Kommandozeilenargumenten, beim Verarbeiten von Konfigurationswerten oder bei der Verarbeitung von Formulareingaben. Das JDK bietet dafür einige einzeilige Werkzeuge in der Klasse Integer, sowie ein klares Fehlverhalten, wenn der Text keine gültige Zahl ist. Dieses Kapitel zeigt die idiomatischen Ansätze und den Umgang mit ungültigen Eingaben.

Integer.parseInt — das primitive int, das man meistens braucht

Integer.parseInt(String) ist das Arbeitstier. Es liest den Text und gibt ein primitives int zurück:

int count = Integer.parseInt("42");   // 42
int neg   = Integer.parseInt("-7");   // -7

Ein führendes + oder - ist erlaubt, aber nichts anderes: umgebende Leerzeichen, Dezimalpunkte, Unterstriche oder Buchstaben führen alle zu einem Fehler. Falls Leerzeichen vorhanden sein könnten, sollte man sie vorher mit s.trim() (oder s.strip() ab Java 11+) entfernen. Es gibt auch eine Überladung, die einen Radix entgegennimmt, sodass Integer.parseInt("ff", 16) hexadezimal liest und 255 zurückgibt.

Integer.valueOf — wenn man ein Integer-Objekt benötigt

Integer.valueOf(String) führt dieselbe Analyse durch, gibt aber ein Integer (den umhüllten Wrapper) statt eines primitiven int zurück. Man greift darauf zurück, wenn der Wert direkt in eine Collection wie List<Integer> oder an eine Stelle kommt, die eine Objektreferenz erfordert. Als Bonus cacht valueOf die umhüllten Instanzen für kleine Werte (−128 bis 127), sodass es geringfügig günstiger sein kann als parseInt gefolgt von Autoboxing.

AnsatzRückgabewertVerwenden wenn
Integer.parseInt(s)primitives intman sofort Arithmetik durchführen möchte
Integer.valueOf(s)Integer-Objektman einen Wrapper für eine Collection oder Generics benötigt
Integer.parseInt(s, radix)primitives intder Text in Basis 2, 8, 16 usw. vorliegt

Ungültige Eingaben mit NumberFormatException behandeln

Beide Methoden werfen eine unchecked NumberFormatException, wenn der String kein parsbarer Integer ist — "12x", "3.14", "" oder null schlagen alle fehl. Da sie unchecked ist, zwingt der Compiler nicht dazu, sie abzufangen, sodass es selbst in der Verantwortung liegt, Eingaben, die man nicht kontrolliert, abzusichern:

String raw = userInput();
try {
  int value = Integer.parseInt(raw.trim());
  // ... use value
} catch (NumberFormatException e) {
  System.out.println("Not a whole number: " + raw);
}

Wenn das Parsen "manchmal scheitern soll" und man keine Ausnahmen im Kontrollfluss möchte, kann man es in einen Helfer einwickeln, der statt einer Exception ein OptionalInt zurückgibt. Das verwandelt ein try/catch in eine saubere isPresent()-Prüfung an der Aufrufstelle. Siehe Java Optional für das allgemeinere Muster und Java try-catch für die Mechanik des Abfangens der Exception.

Ein ausgearbeitetes Beispiel: alle Ansätze nebeneinander

Dieses Programm führt jede Konversionstechnik und die beiden Fehlerfälle aus, sodass man genau sehen kann, was jeder zurückgibt oder ausgibt:

java— editable, runs on the server

Was man aus dem Lauf mitnehmen sollte:

  • Integer.parseInt("42") gibt 42 als primitives int aus, und Integer.valueOf("42") gibt dasselbe 42 aus — der Unterschied liegt im Typ, einem Objekt gegenüber einem Primitiv, nicht im Wert.
  • Die Radix-Überladung wandelt "ff" in 255 um und beweist, dass das zweite Argument die Basis steuert; ohne Radix ist der Standardwert 10.
  • "12x" wird mit NumberFormatException abgelehnt, deren Meldung For input string: "12x" lautet — die Exception benennt genau den Text, der fehlgeschlagen ist, was sie in Logs nützlich macht.
  • Die Übergabe von null wirft NumberFormatException (Meldung Cannot parse null string), nicht NullPointerException — daher deckt ein einzelnes Catch für NumberFormatException sowohl fehlerhafte als auch null-Eingaben ab.
  • Der tryParse-Helfer kürzt " 7 " auf 7 und gibt absent für "nope" zurück, ohne jemals zu werfen — das ist das Muster, das man verwenden sollte, wenn ungültige Eingaben normal und nicht außergewöhnlich sind.

Übungen

Übung
Was passiert, wenn man Integer.parseInt('3.14') in Java aufruft?
Was passiert, wenn man Integer.parseInt('3.14') in Java aufruft?

Verwandte Themen

Was this page helpful?