Ubah String menjadi int atau Integer di Java

1. Perkenalan

Mengubah String menjadi int atau Integer adalah operasi yang sangat umum di Java. Pada artikel ini, kami akan menunjukkan berbagai cara untuk mengatasi masalah ini.

Ada beberapa cara sederhana untuk menangani konversi dasar ini.

2. Integer.parseInt ()

Salah satu solusi utama adalah menggunakan metode statis khusus Integer : parseInt () , yang mengembalikan nilai int primitif :

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

Secara default, metode parseInt () mengasumsikan String yang diberikan adalah integer basis 10. Selain itu, metode ini menerima argumen lain untuk mengubah radix default ini . Misalnya, kita dapat mengurai String s biner sebagai berikut:

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

Secara alami, itu juga mungkin untuk menggunakan metode ini dengan radix lain seperti 16 (heksadesimal) atau 8 (oktal).

3. Integer.valueOf ()

Pilihan lain adalah menggunakan metode Integer.valueOf () statis , yang mengembalikan instance Integer :

@Test public void givenString_whenCallingIntegerValueOf_shouldConvertToInt() { String givenString = "42"; Integer result = Integer.valueOf(givenString); assertThat(result).isEqualTo(new Integer(42)); }

Demikian pula, metode valueOf () juga menerima radix kustom sebagai argumen kedua:

@Test public void givenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt() { String givenString = "101010"; Integer result = Integer.valueOf(givenString, 2); assertThat(result).isEqualTo(new Integer(42)); }

3.1. Cache Integer

Pada pandangan pertama, mungkin terlihat bahwa metode valueOf () dan parseInt () sama persis. Untuk sebagian besar, ini benar - bahkan metode valueOf () mendelegasikan ke metode parseInt secara internal.

Namun, ada satu perbedaan yang halus antara kedua metode: yang valueOf () metode menggunakan cache bilangan bulat internal . Cache ini akan mengembalikan instance Integer yang sama untuk angka antara -128 dan 127 :

@Test public void givenString_whenCallingValueOf_shouldCacheSomeValues() { for (int i = -128; i <= 127; i++) { String value = i + ""; Integer first = Integer.valueOf(value); Integer second = Integer.valueOf(value); assertThat(first).isSameAs(second); } }

Oleh karena itu, sangat disarankan untuk menggunakan valueOf () daripada parseInt () untuk mengekstrak bilangan bulat dalam kotak karena ini dapat menghasilkan footprint keseluruhan yang lebih baik untuk aplikasi kita.

4. Pembuat Integer

Anda juga bisa menggunakan konstruktor Integer :

@Test public void givenString_whenCallingIntegerConstructor_shouldConvertToInt() { String givenString = "42"; Integer result = new Integer(givenString); assertThat(result).isEqualTo(new Integer(42)); }

Mulai Java 9, konstruktor ini sudah tidak digunakan lagi karena mendukung metode pabrik statis lainnya seperti valueOf () atau parseInt () . Bahkan sebelum penghentian ini, sangat jarang menggunakan konstruktor ini. Kita harus menggunakan parseInt () untuk mengonversi string menjadi primitif int atau gunakan valueOf () untuk mengubahnya menjadi objek Integer .

5. Integer.decode ()

Selain itu, Integer.decode () berfungsi mirip dengan Integer.valueOf (), tetapi juga dapat menerima representasi angka yang berbeda:

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

6. NumberFormatException

Semua metode yang disebutkan di atas memunculkan NumberFormatException, saat menemukan nilai String yang tidak terduga . Di sini Anda dapat melihat contoh situasi seperti itu:

@Test(expected = NumberFormatException.class) public void givenInvalidInput_whenParsingInt_shouldThrow() { String givenString = "nan"; Integer.parseInt(givenString); }

7. Dengan Jambu Biji

Tentu saja, kita tidak perlu terpaku pada inti Java itu sendiri. Ini adalah bagaimana hal yang sama dapat dicapai menggunakan Ints.tryParse () Guava , yang mengembalikan nilai null jika tidak dapat mengurai input:

@Test public void givenString_whenTryParse_shouldConvertToInt() { String givenString = "42"; Integer result = Ints.tryParse(givenString); assertThat(result).isEqualTo(42); }

Selain itu, metode tryParse () juga menerima argumen radix kedua yang mirip dengan parseInt () dan valueOf ().

8. Kesimpulan

Pada artikel ini, kami telah mempelajari beberapa cara untuk mengonversi instance String menjadi instance int atau Integer .

Semua contoh kode, tentu saja, dapat ditemukan di GitHub.