Converteer String naar int of Integer in Java

1. Inleiding

Omzetten van een Draad aan een int of Geheel getal is een veel voorkomende bewerking in Java. In dit artikel laten we verschillende manieren zien om met dit probleem om te gaan.

Er zijn een paar eenvoudige manieren om deze basisconversie aan te pakken.

2. Geheel getal.parseInt ()

Een van de belangrijkste oplossingen is om gebruik Geheel getal‘Speciale statische methode: parseInt (), wat een primitief retourneert int waarde:

@Test openbare leegte gegevenString_whenParsingInt_shouldConvertToInt () {String gegevenString = "42"; int resultaat = Integer.parseInt (gegevenString); assertThat (resultaat) .isEqualTo (42); }

Standaard is het parseInt () methode gaat uit van het gegeven Draad is een geheel getal met grondtal 10. Bovendien accepteert deze methode een ander argument om deze standaard te wijzigen radix. We kunnen bijvoorbeeld binair ontleden Draads als volgt:

@Test openbare leegte gegevenBinaryString_whenParsingInt_shouldConvertToInt () {String gegevenString = "101010"; int resultaat = Integer.parseInt (gegevenString, 2); assertThat (resultaat) .isEqualTo (42); }

Het is natuurlijk ook mogelijk om deze methode te gebruiken met een andere radix zoals 16 (hexadecimaal) of 8 (octaal).

3. Integer.valueOf ()

Een andere optie zou zijn gebruik de statische Integer.valueOf () methode, die een Geheel getal voorbeeld:

@Test openbare leegte gegevenString_whenCallingIntegerValueOf_shouldConvertToInt () {String gegevenString = "42"; Integer resultaat = Integer.valueOf (gegevenString); assertThat (resultaat) .isEqualTo (nieuw geheel getal (42)); }

Evenzo is het waarde van() methode accepteert ook een aangepaste radix als het tweede argument:

@Test openbare leegte gegevenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt () {String gegevenString = "101010"; Integer resultaat = Integer.valueOf (gegevenString, 2); assertThat (resultaat) .isEqualTo (nieuw geheel getal (42)); }

3.1. Geheel getal cache

Op het eerste gezicht lijkt het erop dat de waarde van() en parseInt () methoden zijn precies hetzelfde. Dit is voor het grootste deel waar - zelfs de waarde van() methode delegeert naar de parseInt methode intern.

Er is echter een subtiel verschil tussen deze twee methoden: de waarde van() methode gebruikt intern een cache met gehele getallen. Deze cache zou hetzelfde teruggeven Geheel getal bijvoorbeeld voor nummers tussen -128 en 127:

@Test openbare leegte gegevenString_whenCallingValueOf_shouldCacheSomeValues ​​() {for (int i = -128; i <= 127; i ++) {String value = i + ""; Integer first = Integer.valueOf (waarde); Integer second = Integer.valueOf (waarde); assertThat (eerste) .isSameAs (tweede); }}

Daarom wordt het ten zeerste aanbevolen om waarde van() in plaats van parseInt () om omkaderde gehele getallen te extraheren, omdat dit kan leiden tot een betere algehele voetafdruk voor onze applicatie.

4. Geheel getal‘S Constructor

Je zou ook kunnen gebruiken Geheel getal‘S constructor:

@Test openbare leegte gegevenString_whenCallingIntegerConstructor_shouldConvertToInt () {String gegevenString = "42"; Integer resultaat = nieuw geheel getal (gegevenString); assertThat (resultaat) .isEqualTo (nieuw geheel getal (42)); }

Vanaf Java 9, deze constructor is verouderd in het voordeel van andere statische fabrieksmethoden zoals waarde van() of parseInt (). Zelfs vóór deze afkeuring was het zelden gepast om deze constructor te gebruiken. We zouden moeten gebruiken parseInt () om een ​​string naar een int primitief of gebruik waarde van() om het om te zetten in een Geheel getal voorwerp.

5. Geheel getal.decode ()

Ook, Geheel getal.decode () werkt op dezelfde manier als de Integer.valueOf (), maar kan ook verschillende nummerweergaven accepteren:

@Test openbare ongeldig gegevenString_whenCallingIntegerDecode_shouldConvertToInt () {String gegevenString = "42"; int resultaat = Integer.decode (gegevenString); assertThat (resultaat) .isEqualTo (42); }

6. NumberFormatException

Alle bovengenoemde methoden gooien een NumberFormatException, wanneer u onverwachts tegenkomt Draad waarden. Hier ziet u een voorbeeld van een dergelijke situatie:

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

7. Met Guava

Natuurlijk hoeven we ons niet aan de kern Java zelf te houden. Dit is hoe hetzelfde kan worden bereikt met Guava's Ints.tryParse (), wat een nul waarde als het de invoer niet kan parseren:

@Test openbare leegte gegevenString_whenTryParse_shouldConvertToInt () {String gegevenString = "42"; Integer resultaat = Ints.tryParse (gegevenString); assertThat (resultaat) .isEqualTo (42); }

Bovendien is de tryParse () methode accepteert ook een seconde radix argument vergelijkbaar met parseInt () en waarde van().

8. Conclusie

In dit artikel hebben we verschillende manieren onderzocht om te converteren Draad instanties naar int of Geheel getal gevallen.

Alle codevoorbeelden zijn natuurlijk te vinden op GitHub.