Pretvori niz u int ili Integer u Javi

1. Uvod

Pretvaranje a Niz do an int ili Cijeli broj je vrlo česta operacija u Javi. U ovom ćemo članku pokazati više načina za rješavanje ovog problema.

Postoji nekoliko jednostavnih načina za rješavanje ove osnovne konverzije.

2. Integer.parseInt ()

Jedno od glavnih rješenja je koristiti Cijeli broj'S namjenska statička metoda: parseInt (), koji vraća primitiv int vrijednost:

@Test javna praznina givenString_whenParsingInt_shouldConvertToInt () {String givenString = "42"; int rezultat = Integer.parseInt (givenString); assertThat (rezultat) .isEqualTo (42); }

Prema zadanim postavkama parseInt () metoda pretpostavlja dano Niz je cijeli broj od baze-10. Uz to, ova metoda prihvaća još jedan argument za promjenu ovog zadanog radix. Na primjer, možemo raščlaniti binarne datoteke Nizs kako slijedi:

@Test javna praznina givenBinaryString_whenParsingInt_shouldConvertToInt () {String givenString = "101010"; int rezultat = Integer.parseInt (givenString, 2); assertThat (rezultat) .isEqualTo (42); }

Naravno, također je moguće koristiti ovu metodu s bilo kojim drugim radiksom, poput 16 (heksadecimalni) ili 8 (oktalni).

3. Integer.valueOf ()

Druga opcija bila bi koristiti statički Integer.valueOf () metoda koja vraća Cijeli broj primjer:

@Test javna praznina givenString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "42"; Rezultat cijelog broja = Integer.valueOf (givenString); assertThat (rezultat) .isEqualTo (novi cijeli broj (42)); }

Slično tome, vrijednost() metoda također prihvaća običaj radix kao drugi argument:

@Test javna praznina givenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "101010"; Rezultat cijelog broja = Integer.valueOf (givenString, 2); assertThat (rezultat) .isEqualTo (novi cijeli broj (42)); }

3.1. Celobrojna predmemorija

Na prvi pogled može se činiti da vrijednost() i parseInt () metode su potpuno iste. Uglavnom je to istina - čak i vrijednost() metoda delegira na raščlaniti metoda interno.

Međutim, postoji jedna suptilna razlika između ove dvije metode: the vrijednost() metoda interno koristi cjelobrojnu predmemoriju. Ova predmemorija bi vrati isto Cijeli broj primjerice za brojeve između -128 i 127:

@Test javna praznina givenString_whenCallingValueOf_shouldCacheSomeValues ​​() {for (int i = -128; i <= 127; i ++) {Vrijednost niza = i + ""; Prvo cjelobrojno = Integer.valueOf (vrijednost); Integer second = Integer.valueOf (vrijednost); assertThat (first) .isSameAs (second); }}

Stoga se toplo preporučuje vrijednost() umjesto parseInt () za izdvajanje uokvirenih cijelih brojeva jer to može dovesti do boljeg ukupnog otiska za našu aplikaciju.

4. Cijeli brojKonstruktor

Također biste mogli koristiti Cijeli brojKonstruktor:

@Test javna praznina givenString_whenCallingIntegerConstructor_shouldConvertToInt () {String givenString = "42"; Integer rezultat = novi Integer (givenString); assertThat (rezultat) .isEqualTo (novi cijeli broj (42)); }

Od Jave 9, ovaj je konstruktor zastario u korist drugih statičkih tvorničkih metoda kao što su vrijednost() ili parseInt (). Čak i prije ovog odstupanja, rijetko je bilo prikladno koristiti ovaj konstruktor. Trebali bismo koristiti parseInt () pretvoriti niz u int primitivna ili upotreba vrijednost() pretvoriti ga u Cijeli broj objekt.

5. Integer.decode ()

Također, Integer.decode () radi slično kao Integer.valueOf (), ali također može prihvatiti prikaz različitih brojeva:

@Test javna praznina givenString_whenCallingIntegerDecode_shouldConvertToInt () {String givenString = "42"; int rezultat = Integer.decode (givenString); assertThat (rezultat) .isEqualTo (42); }

6. NumberFormatException

Sve gore spomenute metode bacaju a NumberFormatException, pri susretu s neočekivanim Niz vrijednosti. Ovdje možete vidjeti primjer takve situacije:

@Test (očekuje se = NumberFormatException.class) javna praznina givenInvalidInput_whenParsingInt_shouldThrow () {String givenString = "nan"; Integer.parseInt (givenString); }

7. S Guavom

Naravno, ne trebamo se držati same jezgre Java. Na taj se način ista stvar može postići pomoću Guave Ints.tryParse (), koji vraća a null vrijednost ako ne može raščlaniti ulaz:

@Test javna praznina givenString_whenTryParse_shouldConvertToInt () {String givenString = "42"; Cjelobrojni rezultat = Ints.tryParse (givenString); assertThat (rezultat) .isEqualTo (42); }

Štoviše, tryParse () metoda prihvaća i drugu radix argument sličan parseInt () i vrijednost().

8. Zaključak

U ovom smo članku istražili više načina pretvorbe Niz instance do int ili Cijeli broj instance.

Sve primjere koda možete, naravno, pronaći na GitHubu.