Konverter String til int eller Integer i Java

1. Introduksjon

Konvertering av en String til en int eller Heltall er en veldig vanlig operasjon i Java. I denne artikkelen vil vi vise flere måter å håndtere dette problemet på.

Det er noen få enkle måter å takle denne grunnleggende konverteringen på.

2. Integer.parseInt ()

En av hovedløsningene er å bruk HeltallSin dedikerte statiske metode: parseInt (), som returnerer en primitiv int verdi:

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

Som standard er parseInt () metoden forutsetter det gitte String er et basis-10 heltall. I tillegg godtar denne metoden et annet argument for å endre denne standarden radix. For eksempel kan vi analysere binær Strings som følger:

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

Naturligvis er det også mulig å bruke denne metoden med hvilken som helst annen radiks som 16 (heksadesimal) eller 8 (oktal).

3. Integer.valueOf ()

Et annet alternativ ville være å bruk statisk Integer.valueOf () metode, som returnerer en Heltall forekomst:

@Test offentlig ugyldighet givenString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "42"; Integer result = Integer.valueOf (givenString); assertThat (resultat) .isEqualTo (nytt heltal (42)); }

Tilsvarende verdien av() metoden godtar også en tilpasset radix som det andre argumentet:

@Test offentlig ugyldig givenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "101010"; Heltallresultat = Heltall.verdiOf (gittString, 2); assertThat (resultat) .isEqualTo (nytt heltal (42)); }

3.1. Heltallbuffer

Ved første øyekast kan det virke som at verdien av() og parseInt () metodene er nøyaktig de samme. For det meste er dette sant - til og med verdien av() metoden delegerer til parseInt metode internt.

Imidlertid er det en subtil forskjell mellom disse to metodene: de verdien av() metoden bruker et heltallbuffer internt. Denne cachen ville returner det samme Heltall forekomst for tall mellom -128 og 127:

@Test offentlig tomrom gittString_whenCallingValueOf_shouldCacheSomeValues ​​() {for (int i = -128; i <= 127; i ++) {Strengverdi = i + ""; Integer first = Integer.valueOf (verdi); Integer second = Integer.valueOf (verdi); assertThat (første) .isSameAs (andre); }}

Derfor anbefales det sterkt å bruke verdien av() i stedet for parseInt () for å trekke ut heltall i boks, da det kan føre til et bedre samlet fotavtrykk for applikasjonen vår.

4. Heltall’S Constructor

Du kan også bruke Heltall’S konstruktør:

@Test offentlig ugyldighet givenString_whenCallingIntegerConstructor_shouldConvertToInt () {String givenString = "42"; Heltallresultat = nytt Heltall (givenString); assertThat (resultat) .isEqualTo (nytt heltal (42)); }

Fra og med Java 9, denne konstruktøren er utfaset til fordel for andre statiske fabrikkmetoder som verdien av() eller parseInt (). Allerede før denne avskrivningen var det sjelden hensiktsmessig å bruke denne konstruktøren. Vi burde bruke parseInt () å konvertere en streng til en int primitiv eller bruk verdien av() å konvertere den til en Heltall gjenstand.

5. Integer.decode ()

Også, Integer.decode () fungerer på samme måte som Integer.valueOf (), men kan også godta forskjellige antall representasjoner:

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

6. NumberFormatException

Alle ovennevnte metoder kaster en NumberFormatException, når du møter uventede String verdier. Her kan du se et eksempel på en slik situasjon:

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

7. Med Guava

Selvfølgelig trenger vi ikke å holde oss til selve kjernen Java. Slik kan det samme oppnås ved hjelp av Guava Ints.tryParse (), som returnerer a null verdi hvis den ikke kan analysere inngangen:

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

Videre, den tryParse () metoden godtar også et sekund radix argument som ligner på parseInt () og verdien av().

8. Konklusjon

I denne artikkelen har vi utforsket flere måter å konvertere på String forekomster til int eller Heltall tilfeller.

Alle kodeeksempler kan selvfølgelig finnes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found