Bergabunglah dengan Array of Primitives dengan Separator di Java

1. Perkenalan

Dalam tutorial singkat ini, kita akan belajar cara menggabungkan array primitif dengan pemisah karakter tunggal di Java . Untuk contoh kita, kita akan mempertimbangkan dua larik: larik int dan larik char .

2. Mendefinisikan Masalah

Mari kita mulai dengan mendefinisikan array int dan array char untuk contoh, serta karakter pemisah yang akan kita gunakan untuk menggabungkan isinya:

int[] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9}; char[] charArray = {'a', 'b', 'c', 'd', 'e', 'f'}; char separatorChar = '-'; String separator = String.valueOf(separatorChar); 

Perhatikan bahwa kami telah menyertakan pemisah char dan String karena beberapa metode yang akan kami perlihatkan memerlukan argumen char , sementara yang lain memerlukan argumen String .

Hasil operasi penggabungan akan berisi "1-2-3-4-5-6-7-8-9" untuk larik int , dan "abcdef" untuk larik karakter .

3. Collectors.joining ()

Mari kita mulai dengan salah satu metode yang tersedia dari Java 8 Stream API - Collectors.joining () .

Pertama, kita membuat Stream dari array primitif menggunakan metode Arrays.stream () yang ditemukan di paket java.util . Selanjutnya, kami memetakan setiap elemen ke String . Dan akhirnya, kami menggabungkan elemen dengan pemisah yang kami berikan.

Mari kita mulai dengan array int kita :

String joined = Arrays.stream(intArray) .mapToObj(String::valueOf) .collect(Collectors.joining(separator));

Saat menggabungkan array char kita dengan metode ini, pertama-tama kita harus membungkus array char ke dalam CharBuffer dan kemudian memproyeksikannya ke char lagi. Hal ini karena karakter () metode mengembalikan sebuah Streaming dari int nilai-nilai.

Sayangnya, Java Stream API tidak menyediakan metode asli untuk menggabungkan Stream of char .

Mari bergabung dengan array karakter kita :

String joined = CharBuffer.wrap(charArray).chars() .mapToObj(intValue -> String.valueOf((char) intValue)) .collect(Collectors.joining(separator));

4. StringJoiner

Mirip dengan Collectors.joining () , pendekatan ini menggunakan API Stream, tetapi alih-alih mengumpulkan elemen, ia melakukan iterasi melalui elemen dan menambahkannya ke instance StringJoiner :

StringJoiner intStringJoiner = new StringJoiner(separator); Arrays.stream(intArray) .mapToObj(String::valueOf) .forEach(intStringJoiner::add); String joined = intStringJoiner.toString();

Sekali lagi, kita harus membungkus array karakter kita ke CharBuffer saat menggunakan Stream API:

StringJoiner charStringJoiner = new StringJoiner(separator); CharBuffer.wrap(charArray).chars() .mapToObj(intChar -> String.valueOf((char) intChar)) .forEach(charStringJoiner::add); String joined = charStringJoiner.toString();

5. Apache Commons Lang

Pustaka Apache Commons Lang menyediakan beberapa metode praktis di kelas StringUtils dan ArrayUtils yang dapat kita gunakan untuk menggabungkan array primitif kita.

Untuk menggunakan pustaka ini, kita perlu menambahkan ketergantungan commons-lang3 ke pom.xml kita :

 org.apache.commons commons-lang3 3.8.1 

Saat bekerja dengan pemisah String , kita akan menggunakan StringUtils dan ArrayUtils .

Mari gunakan ini bersama-sama untuk menggabungkan array int kita :

String joined = StringUtils.join(ArrayUtils.toObject(intArray), separator);

Atau, jika kita menggunakan tipe karakter primitif sebagai pemisah, kita cukup menulis:

String joined = StringUtils.join(intArray, separatorChar);

Implementasi untuk bergabung dengan array karakter kita sangat mirip:

String joined = StringUtils.join(ArrayUtils.toObject(charArray), separator);

Dan saat menggunakan pemisah karakter :

String joined = StringUtils.join(charArray, separatorChar);

6. Jambu biji

Perpustakaan Guava Google menyediakan kelas Joiner yang dapat kita gunakan untuk menggabungkan array kita. Untuk menggunakan Guava dalam proyek kita, kita perlu menambahkan dependensi guava Maven:

 com.google.guava guava 27.0.1-jre 

Mari bergabung dengan array int kita menggunakan kelas Joiner :

String joined = Joiner.on(separator).join(Ints.asList(intArray));

Dalam contoh ini, kami juga menggunakan Ints.asList () metode dari Jambu, yang baik mengubah array primitif menjadi Daftar dari Integer .

Jambu menawarkan metode yang sama untuk mengkonversi Char array ke Daftar dari karakter. Akibatnya, bergabung dengan array karakter kita sangat mirip dengan contoh di atas yang menggunakan array int :

String joined = Joiner.on(separator).join(Chars.asList(charArray));

7. StringBuilder

Terakhir, jika kita tidak dapat menggunakan Java 8 atau pustaka pihak ketiga, kita dapat secara manual menggabungkan larik elemen dengan StringBuilder . Dalam kasus ini, implementasinya sama untuk kedua jenis array:

if (array.length == 0) { return ""; } StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < array.length - 1; i++) { stringBuilder.append(array[i]); stringBuilder.append(separator); } stringBuilder.append(array[array.length - 1]); String joined = stringBuilder.toString();

8. Kesimpulan

Artikel singkat ini mengilustrasikan sejumlah cara untuk menggabungkan array primitif dengan karakter atau string pemisah tertentu. Kami menunjukkan contoh menggunakan solusi JDK asli, serta solusi tambahan menggunakan dua pustaka pihak ketiga - Apache Commons Lang dan Guava.

Seperti biasa, kode lengkap yang digunakan dalam artikel ini tersedia di GitHub.