Konvertieren Sie String in Java in int oder Integer

1. Einleitung

Das Konvertieren eines Strings in ein int oder eine Ganzzahl ist in Java eine sehr häufige Operation. In diesem Artikel werden verschiedene Möglichkeiten zur Behandlung dieses Problems aufgezeigt.

Es gibt einige einfache Möglichkeiten, um diese grundlegende Konvertierung in Angriff zu nehmen.

2. Integer.parseInt ()

Eine der Hauptlösungen ist die Verwendung der dedizierten statischen Methode von Integer : parseInt () , die einen primitiven int- Wert zurückgibt :

@Test public void givenString_whenParsingInt_shouldConvertToInt() { String givenString = "42"; int result = Integer.parseInt(givenString); assertThat(result).isEqualTo(42); }

Standardmäßig geht die parseInt () -Methode davon aus, dass der angegebene String eine Ganzzahl der Basis 10 ist. Darüber hinaus akzeptiert diese Methode ein weiteres Argument, um diesen Standard- Radix zu ändern . Zum Beispiel können wir binäre Zeichenfolgen wie folgt analysieren :

@Test public void givenBinaryString_whenParsingInt_shouldConvertToInt() { String givenString = "101010"; int result = Integer.parseInt(givenString, 2); assertThat(result).isEqualTo(42); }

Natürlich ist es auch möglich, diese Methode mit jedem anderen Radix wie 16 (hexadezimal) oder 8 (oktal) zu verwenden.

3. Integer.valueOf ()

Eine andere Option wäre die Verwendung der statischen Integer.valueOf () -Methode, die eine Integer- Instanz zurückgibt :

@Test public void givenString_whenCallingIntegerValueOf_shouldConvertToInt() { String givenString = "42"; Integer result = Integer.valueOf(givenString); assertThat(result).isEqualTo(new Integer(42)); }

In ähnlicher Weise akzeptiert die valueOf () -Methode auch einen benutzerdefinierten Radix als zweites Argument:

@Test public void givenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt() { String givenString = "101010"; Integer result = Integer.valueOf(givenString, 2); assertThat(result).isEqualTo(new Integer(42)); }

3.1. Integer Cache

Auf den ersten Blick scheint es, dass die Methoden valueOf () und parseInt () genau gleich sind. Dies ist größtenteils der Fall - sogar die valueOf () -Methode wird intern an die parseInt- Methode delegiert .

Es gibt jedoch einen subtilen Unterschied zwischen diesen beiden Methoden: Die valueOf () -Methode verwendet intern einen Integer-Cache . Dieser Cache würde dieselbe Integer- Instanz für Zahlen zwischen -128 und 127 zurückgeben :

@Test public void givenString_whenCallingValueOf_shouldCacheSomeValues() { for (int i = -128; i <= 127; i++) { String value = i + ""; Integer first = Integer.valueOf(value); Integer second = Integer.valueOf(value); assertThat(first).isSameAs(second); } }

Daher wird dringend empfohlen, valueOf () anstelle von parseInt () zu verwenden, um Ganzzahlen in Kästchen zu extrahieren, da dies zu einer besseren Gesamtfläche für unsere Anwendung führen kann.

4. Integer -Konstruktor

Sie können auch den Konstruktor von Integer verwenden:

@Test public void givenString_whenCallingIntegerConstructor_shouldConvertToInt() { String givenString = "42"; Integer result = new Integer(givenString); assertThat(result).isEqualTo(new Integer(42)); }

Ab Java 9 ist dieser Konstruktor zugunsten anderer statischer Factory-Methoden wie valueOf () oder parseInt () veraltet . Selbst vor dieser Ablehnung war es selten angebracht, diesen Konstruktor zu verwenden. Wir sollten parseInt () verwenden , um eine Zeichenfolge in ein int- Grundelement zu konvertieren, oder valueOf () verwenden , um sie in ein Integer- Objekt zu konvertieren .

5. Integer.decode ()

Auch Integer.decode () funktioniert ähnlich wie die Integer.valueOf (), kann aber auch andere Zahlendarstellungen akzeptieren:

@Test public void givenString_whenCallingIntegerDecode_shouldConvertToInt() { String givenString = "42"; int result = Integer.decode(givenString); assertThat(result).isEqualTo(42); }

6. NumberFormatException

Alle oben genannten Methoden lösen eine NumberFormatException aus, wenn unerwartete String- Werte auftreten. Hier sehen Sie ein Beispiel für eine solche Situation:

@Test(expected = NumberFormatException.class) public void givenInvalidInput_whenParsingInt_shouldThrow() { String givenString = "nan"; Integer.parseInt(givenString); }

7. Mit Guave

Natürlich müssen wir uns nicht an das Kern-Java selbst halten. Auf diese Weise kann dasselbe mit Guavas Ints.tryParse () erreicht werden, das einen Nullwert zurückgibt , wenn die Eingabe nicht analysiert werden kann:

@Test public void givenString_whenTryParse_shouldConvertToInt() { String givenString = "42"; Integer result = Ints.tryParse(givenString); assertThat(result).isEqualTo(42); }

Darüber hinaus akzeptiert die tryParse () -Methode auch ein zweites Radix- Argument, das parseInt () und valueOf () ähnelt.

8. Fazit

In diesem Artikel haben wir verschiedene Möglichkeiten zum Konvertieren von String- Instanzen in int- oder Integer- Instanzen untersucht.

Alle Codebeispiele finden Sie natürlich auf GitHub.