Konverter streng til int eller heltal i Java

1. Introduktion

Konvertering af en Snor til en int eller Heltal er en meget almindelig operation i Java. I denne artikel vil vi vise flere måder at håndtere dette problem på.

Der er et par enkle måder at tackle denne grundlæggende konvertering på.

2. Integer.parseInt ()

En af de vigtigste løsninger er at brug Heltal'S dedikerede statiske metode: parseInt (), som returnerer en primitiv int værdi:

@Test offentlig ugyldighed givenString_whenParsingInt_shouldConvertToInt () {String givenString = "42"; int resultat = Integer.parseInt (givenString); assertThat (resultat) .isEqualTo (42); }

Som standard er parseInt () metode antager det givne Snor er et base-10 heltal. Derudover accepterer denne metode et andet argument for at ændre denne standard radix. For eksempel kan vi analysere binært Snors som følger:

@Test offentlig ugyldighed givenBinaryString_whenParsingInt_shouldConvertToInt () {String givenString = "101010"; int resultat = Integer.parseInt (givenString, 2); assertThat (resultat) .isEqualTo (42); }

Naturligvis er det også muligt at bruge denne metode med enhver anden radix som 16 (hexadecimal) eller 8 (oktal).

3. Integer.valueOf ()

En anden mulighed ville være at brug det statiske Integer.valueOf () metode, som returnerer en Heltal eksempel:

@Test offentlig ugyldighed givenString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "42"; Heltalsresultat = Integer.valueOf (givenString); assertThat (resultat) .isEqualTo (nyt heltal (42)); }

Tilsvarende er Værdi af() metode accepterer også en brugerdefineret radix som det andet argument:

@Test offentlig ugyldighed givenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "101010"; Heltalsresultat = Integer.valueOf (givenString, 2); assertThat (resultat) .isEqualTo (nyt heltal (42)); }

3.1. Heltalscache

Ved første øjekast ser det ud til, at Værdi af() og parseInt () metoder er nøjagtigt de samme. For det meste er dette sandt - selv Værdi af() metode delegerede til parseInt metode internt.

Der er dog en subtil forskel mellem disse to metoder: det Værdi af() metoden bruger et heltal cache internt. Denne cache ville returner det samme Heltal eksempel for tal mellem -128 og 127:

@Test offentligt ugyldigt givenString_whenCallingValueOf_shouldCacheSomeValues ​​() {for (int i = -128; i <= 127; i ++) {Strengværdi = i + ""; Heltal først = Heltal.værdiOf (værdi); Heltal sekund = Heltal.værdiOf (værdi); hævder, at (første) .isSameAs (anden); }}

Derfor anbefales det stærkt at bruge det Værdi af() i stedet for parseInt () at udtrække boksede heltal, da det kan føre til et bedre samlet fodaftryk for vores applikation.

4. Heltal'S konstruktør

Du kan også bruge Heltal'S konstruktør:

@Test offentlig ugyldighed givenString_whenCallingIntegerConstructor_shouldConvertToInt () {String givenString = "42"; Heltalsresultat = nyt heltal (givenString); assertThat (resultat) .isEqualTo (nyt heltal (42)); }

Fra og med Java 9, denne konstruktør er udfaset til fordel for andre statiske fabriksmetoder som f.eks Værdi af() eller parseInt (). Selv før denne afskrivning var det sjældent hensigtsmæssigt at bruge denne konstruktør. Vi burde bruge parseInt () at konvertere en streng til en int primitiv eller brug Værdi af() at konvertere det til et Heltal objekt.

5. Integer.decode ()

Også, Integer.decode () fungerer på samme måde som Integer.valueOf (), men kan også acceptere forskellige antal repræsentationer:

@Test offentlig ugyldighed givenString_whenCallingIntegerDecode_shouldConvertToInt () {String givenString = "42"; int resultat = Integer.decode (givenString); assertThat (resultat) .isEqualTo (42); }

6. NumberFormatException

Alle ovennævnte metoder kaster en NumberFormatException, når man støder på uventet Snor værdier. Her kan du se et eksempel på en sådan situation:

@Test (forventet = NumberFormatException.class) offentlig ugyldighed givenInvalidInput_whenParsingInt_shouldThrow () {String givenString = "nan"; Integer.parseInt (givenString); }

7. Med Guava

Selvfølgelig behøver vi ikke holde os til selve kernen Java. Dette er, hvordan det samme kan opnås ved hjælp af Guava Ints.tryParse (), som returnerer en nul værdi, hvis den ikke kan analysere input:

@Test offentlig ugyldighed givenString_whenTryParse_shouldConvertToInt () {String givenString = "42"; Heltalsresultat = Ints.tryParse (givenString); assertThat (resultat) .isEqualTo (42); }

Desuden er tryParse () metode accepterer også et sekund radix argument svarende til parseInt () og Værdi af().

8. Konklusion

I denne artikel har vi undersøgt flere måder at konvertere på Snor tilfælde til int eller Heltal tilfælde.

Alle kodeeksempler kan naturligvis findes på GitHub.