Konvertálja a karakterláncot int vagy egész számra a Java-ban

1. Bemutatkozás

Konvertálás a Húr egy int vagy Egész szám a Java-ban nagyon gyakori művelet. Ebben a cikkben számos módszert mutatunk be a probléma kezelésére.

Néhány alapvető módja van ennek az alapvető átalakulásnak a kezelésére.

2. Integer.parseInt ()

Az egyik fő megoldás az használat Egész számDedikált statikus módszer: parseInt (), amely egy primitívet ad vissza int érték:

@Test public void givenString_whenParsingInt_shouldConvertToInt () {String givenString = "42"; int eredmény = Egész szám.parseInt (adottString); assertThat (eredmény) .isEqualTo (42); }

Alapértelmezés szerint a parseInt () módszer feltételezi az adott Húr egy bázis-10 egész szám. Ezenkívül ez a módszer elfogad egy másik argumentumot az alapértelmezés megváltoztatásához alapszám. Például elemezhetjük a bináris elemeket Húrs az alábbiak szerint:

@Test public void givenBinaryString_whenParsingInt_shouldConvertToInt () {String givenString = "101010"; int eredmény = Egész szám.parseInt (adottString, 2); assertThat (eredmény) .isEqualTo (42); }

Természetes, hogy ezt a módszert bármilyen más rádiusszal is lehet használni, például 16 (hexadecimális) vagy 8 (oktális).

3. Integer.valueOf ()

Egy másik lehetőség az lenne használja a statikus Integer.valueOf () metódus, amely egy Egész szám példa:

@Test public void givenString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "42"; Egész eredmény = Integer.valueOf (adottString); assertThat (eredmény) .isEqualTo (új egész szám (42)); }

Hasonlóképpen a értéke() metódus is elfogad egy szokást alapszám második érvként:

@Test public void givenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "101010"; Egész eredmény = Integer.valueOf (adottString, 2); assertThat (eredmény) .isEqualTo (új egész szám (42)); }

3.1. Egész gyorsítótár

Első pillantásra úgy tűnhet, hogy a értéke() és parseInt () módszerek pontosan megegyeznek. Nagyrészt ez igaz - még az is értéke() módszer delegálja a parseInt módszer belsőleg.

E két módszer között azonban van egy finom különbség: a értéke() A módszer egy egész gyorsítótár belső használatát jelenti. Ez a gyorsítótár megtenné adja vissza ugyanazt Egész szám -128 és 127 közötti számokra:

@Test public void givenString_whenCallingValueOf_shouldCacheSomeValues ​​() {for (int i = -128; i <= 127; i ++) {String value = i + ""; Először egész = Integer.valueOf (érték); Egész másodperc = Integer.valueOf (érték); assertThat (első) .isSameAs (második); }}

Ezért nagyon ajánlott használni értéke() ahelyett parseInt () dobozos egészek kibontása, mivel ez jobb általános lábnyomot eredményezhet alkalmazásunk számára.

4. Egész szám’S Konstruktor

Használhatná is Egész számKivitelezője:

@Test public void givenString_whenCallingIntegerConstructor_shouldConvertToInt () {String givenString = "42"; Egész eredmény = új egész szám (adottString); assertThat (eredmény) .isEqualTo (új egész szám (42)); }

Java 9-től kezdve ez a kivitelező elavult egyéb statikus gyári módszerek mellett, mint pl értéke() vagy parseInt (). Már az elavulás előtt is ritkán volt helyénvaló használni ezt a konstruktort. Használnunk kellene parseInt () egy karakterláncot konvertálni int primitív vagy használat értéke() hogy konvertálja an Egész szám tárgy.

5. Integer.decode ()

Is, Integer.decode () hasonlóan működik a Integer.valueOf (), de elfogadhat különböző számábrázolásokat is:

@Test public void givenString_whenCallingIntegerDecode_shouldConvertToInt () {String givenString = "42"; int eredmény = Egész szám.dekód (adottString); assertThat (eredmény) .isEqualTo (42); }

6. NumberFormatException

Az összes fent említett módszer a NumberFormatException, amikor váratlanul találkozik Húr értékek. Itt láthat egy példát egy ilyen helyzetre:

@Test (várható = NumberFormatException.class) public void givenInvalidInput_whenParsingInt_shouldThrow () {String megadottString = "nan"; Egész szám.parseInt (adottString); }

7. Guavával

Természetesen nem kell ragaszkodnunk magához a Java-hoz. Így érhető el ugyanez a Guava-ok használatával Ints.tryParse (), amely visszaadja a nulla érték, ha nem tudja elemezni a bemenetet:

@Test public void givenString_whenTryParse_shouldConvertToInt () {String givenString = "42"; Egész eredmény = Ints.tryParse (adottString); assertThat (eredmény) .isEqualTo (42); }

Sőt, a tryParse () metódus is elfogad egy másodikat alapszám hasonló érvelés parseInt () és értéke().

8. Következtetés

Ebben a cikkben a konverzió több módját vizsgáltuk meg Húr példányok int vagy Egész szám példányok.

Minden kódpélda természetesen megtalálható a GitHubon.