Tukarkan String ke int atau Integer di Java

1. Pengenalan

Menukar String ke int atau Integer adalah operasi yang sangat biasa di Java. Dalam artikel ini, kami akan menunjukkan pelbagai cara untuk menangani masalah ini.

Terdapat beberapa cara mudah untuk mengatasi penukaran asas ini.

2. Integer.parseInt ()

Salah satu penyelesaian utama adalah menggunakan kaedah statik 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 lalai, kaedah parseInt () menganggap String yang diberikan adalah bilangan bulat base-10. Selain itu, kaedah ini menerima hujah lain untuk mengubah radix lalai ini . Sebagai contoh, kita dapat menguraikan String binari seperti berikut:

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

Secara semula jadi, juga mungkin untuk menggunakan kaedah ini dengan jejari lain seperti 16 (heksadesimal) atau 8 (oktal).

3. Integer.valueOf ()

Pilihan lain ialah menggunakan kaedah Integer.valueOf () statik , yang mengembalikan contoh Integer :

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

Begitu juga, kaedah valueOf () juga menerima radix tersuai 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, nampaknya kaedah valueOf () dan parseInt () sama. Sebahagian besarnya, ini benar - walaupun kaedah valueOf () mewakilkan kaedah parseInt secara dalaman.

Walau bagaimanapun, terdapat satu perbezaan ketara antara kedua-dua kaedah: yang valueOf () kaedah yang menggunakan cache integer dalaman . Cache ini akan mengembalikan contoh Integer yang sama untuk nombor 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 itu, sangat disarankan untuk menggunakan nilaiOf () dan bukannya parseInt () untuk mengekstrak bilangan bulat berkotak kerana ia boleh menyebabkan jejak keseluruhan yang lebih baik untuk aplikasi kami.

4. Pembina Integer

Anda juga boleh menggunakan konstruktor Integer :

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

Pada Java 9, konstruktor ini tidak lagi digunakan untuk kaedah kilang statik lain seperti valueOf () atau parseInt () . Bahkan sebelum penggunaan ini, jarang sekali menggunakan konstruktor ini. Kita harus menggunakan parseInt () untuk menukar rentetan ke int primitif atau menggunakan nilaiOf () untuk menukarnya ke objek Integer .

5. Integer.decode ()

Juga, Integer.decode () berfungsi sama dengan Integer.valueOf (), tetapi juga dapat menerima perwakilan nombor yang berbeza:

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

6. NumberFormatException

Semua kaedah yang disebutkan di atas melemparkan NumberFormatException, ketika menemui nilai String yang tidak dijangka . Di sini anda dapat melihat contoh situasi seperti ini:

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

7. Dengan Jambu Batu

Sudah tentu, kita tidak perlu berpegang pada inti Java itu sendiri. Ini adalah bagaimana perkara yang sama dapat dicapai dengan menggunakan Ints.tryParse () Guava , yang mengembalikan nilai nol jika tidak dapat menguraikan input:

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

Lebih-lebih lagi, kaedah tryParse () juga menerima argumen radix kedua yang serupa dengan parseInt () dan valueOf ().

8. Kesimpulannya

Dalam artikel ini, kami telah meneroka pelbagai cara untuk menukar instance String ke instance int atau Integer .

Semua contoh kod boleh didapati di GitHub.