Preveďte reťazec na int alebo celé číslo v Jave

1. Úvod

Prevod a String do an int alebo Celé číslo je veľmi častá operácia v Jave. V tomto článku si ukážeme niekoľko spôsobov riešenia tejto problematiky.

Existuje niekoľko jednoduchých spôsobov riešenia tejto základnej konverzie.

2. Integer.parseInt ()

Jedným z hlavných riešení je použitie Celé čísloŠpeciálna statická metóda: parseInt (), ktorá vráti primitív int hodnotu:

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

V predvolenom nastavení je parseInt () metóda predpokladá dané String je celé číslo základne-10. Táto metóda navyše prijíma ďalší argument na zmenu tejto predvolenej hodnoty radix. Napríklad môžeme analyzovať binárne súbory Strings takto:

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

Prirodzene, je tiež možné použiť túto metódu s akýmkoľvek iným radixom, napríklad 16 (hexadecimálny) alebo 8 (osmičkový).

3. Integer.valueOf ()

Ďalšou možnosťou by bolo použite statický Integer.valueOf () metóda, ktorá vracia Celé číslo inštancia:

@Test public void givenString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "42"; Výsledok celého čísla = Integer.valueOf (givenString); assertThat (result) .isEqualTo (new Integer (42)); }

Podobne hodnota() metóda akceptuje aj zvyk radix ako druhý argument:

@Test public void givenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "101010"; Výsledok celého čísla = Integer.valueOf (givenString, 2); assertThat (result) .isEqualTo (new Integer (42)); }

3.1. Celočíselná medzipamäť

Na prvý pohľad sa môže zdať, že hodnota() a parseInt () metódy sú úplne rovnaké. Z väčšej časti je to pravda - dokonca aj hodnota() metóda deleguje na parseInt metóda interne.

Medzi týmito dvoma metódami však existuje jeden jemný rozdiel: the hodnota() metóda interne používa celočíselnú medzipamäť. Táto keška by vrátiť to isté Celé číslo napríklad pre čísla medzi -128 a 127:

@Test public void givenString_whenCallingValueOf_shouldCacheSomeValues ​​() {for (int i = -128; i <= 127; i ++) {String value = i + ""; Celé číslo ako prvé = Integer.valueOf (hodnota); Celé číslo druhé = Integer.valueOf (hodnota); assertThat (prvý) .isSameAs (druhý); }}

Preto sa veľmi odporúča používať hodnota() namiesto parseInt () extrahovať celé čísla v škatuli, pretože to môže viesť k lepšej celkovej stope pre našu aplikáciu.

4. Celé čísloKonštruktér

Môžete tiež použiť Celé čísloKonštruktér:

@Test public void givenString_whenCallingIntegerConstructor_shouldConvertToInt () {String givenString = "42"; Výsledok celého čísla = nové celé číslo (givenString); assertThat (result) .isEqualTo (new Integer (42)); }

Od verzie Java 9 tento konštruktor bol zastaraný v prospech iných statických továrenských metód ako napr hodnota() alebo parseInt (). Už pred týmto ukončením podpory bolo zriedka vhodné použiť tento konštruktor. Mali by sme použiť parseInt () previesť reťazec na int primitívne alebo použitie hodnota() previesť na Celé číslo objekt.

5. Integer.decode ()

Tiež Integer.decode () funguje podobne ako Integer.valueOf (), ale môže prijať aj rôzne početné zastúpenia:

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

6. NumberFormatException

Všetky vyššie uvedené metódy vyvolávajú a NumberFormatException, pri stretnutí neočakávane String hodnoty. Tu môžete vidieť príklad takejto situácie:

@Test (očakáva sa = NumberFormatException.class) public void givenInvalidInput_whenParsingInt_shouldThrow () {String givenString = "nan"; Integer.parseInt (givenString); }

7. S Guavou

Samozrejme sa nemusíme držať samotného jadra Javy. Takto je možné dosiahnuť to isté pomocou produktu Guava Ints.tryParse (), ktorý vracia a nulový hodnotu, ak nemôže analyzovať vstup:

@Test public void givenString_when TryParse_shouldConvertToInt () {String givenString = "42"; Výsledok celého čísla = Ints.tryParse (givenString); assertThat (výsledok) .isEqualTo (42); }

Okrem toho tryParse () metóda akceptuje aj sekundu radix argument podobný parseInt () a hodnota().

8. Záver

V tomto článku sme preskúmali niekoľko spôsobov konverzie String inštancie na int alebo Celé číslo inštancie.

Všetky príklady kódov, samozrejme, nájdete na GitHub.


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