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.