JavaScript memiliki Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
Apakah Java punya yang seperti ini? Saya tahu saya dapat memperbaiki sesuatu sendiri dengan StringBuilder:
static public String join(List<String> list, String conjunction)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String item : list)
{
if (first)
first = false;
else
sb.append(conjunction);
sb.append(item);
}
return sb.toString();
}
... tapi tidak ada gunanya melakukan ini jika sesuatu seperti itu sudah menjadi bagian dari JDK.
String.join()
metode. Lihatlah jawaban ini jika Anda menggunakan Java 8 (atau lebih baru) stackoverflow.com/a/22577565/1115554Jawaban:
Dengan Java 8 Anda dapat melakukan ini tanpa perpustakaan pihak ketiga.
Jika Anda ingin bergabung dengan Kumpulan String, Anda dapat menggunakan metode String.join () baru :
Jika Anda memiliki Koleksi dengan tipe selain String, Anda dapat menggunakan Stream API dengan Collector yang bergabung :
The
StringJoiner
kelas juga mungkin berguna.sumber
assertThat(String.join(", ", Lists.newArrayList("1", null)), is("1, null"));
[a, b, c]
termasuk kawat gigi.Iterable<CharSequence>
; Hubungan antarmuka:Iterable -> Collection -> List
Semua referensi ke Apache Commons baik-baik saja (dan itulah yang kebanyakan orang gunakan) tapi saya pikir setara Guava , Joiner , memiliki API yang jauh lebih baik.
Anda dapat melakukan kasing sederhana dengan
tetapi juga dengan mudah menangani nulls:
atau
dan (cukup berguna sejauh yang saya kehendaki untuk menggunakannya dalam preferensi untuk commons-lang), kemampuan untuk berurusan dengan Maps:
yang sangat berguna untuk debugging dll.
sumber
.useForLastSeparator()
metode serupa? Dengan begitu, Anda bisa mendapatkan sesuatu seperti ", dan" hanya di antara dua item terakhir (dengan "," untuk sisanya).separator
(yang manafinal
). Semua yang saya lihat di Guava, di mana saya biasa menggunakan setara Apache Commons telah jauh lebih baik (baca: lebih bersih, lebih cepat, lebih aman dan lebih kuat secara umum) di Guava dengan lebih sedikit kasus kegagalan tepi dan masalah keamanan utas dan jejak memori yang lebih kecil. Prinsip panduan "cara terbaik" mereka tampaknya benar sejauh ini.String.join()
metode danStringJoiner
kelas.Bukan di luar kotak, tetapi banyak perpustakaan memiliki kesamaan:
Commons Lang:
Musim semi:
sumber
Di Android Anda bisa menggunakan kelas TextUtils .
sumber
String.join
membutuhkan min api level 26 di android.Tidak, tidak ada metode kenyamanan seperti itu di API Java standar.
Tidak mengherankan, Apache Commons menyediakan hal semacam itu di kelas StringUtils mereka jika Anda tidak ingin menulisnya sendiri.
sumber
isEmpty()
metode alih-alih metode (statis)join()
diString
...: rollseyes: :)Tiga kemungkinan di Jawa 8:
sumber
Dengan kolektor java 8, ini dapat dilakukan dengan kode berikut:
Juga, solusi paling sederhana di java 8:
atau
sumber
Saya menulis ini (saya menggunakannya untuk kacang dan mengeksploitasi
toString
, jadi jangan menulisCollection<String>
):tetapi
Collection
tidak didukung oleh JSP, jadi untuk TLD saya menulis:dan dimasukkan ke
.tld
file:dan menggunakannya dalam file JSP sebagai:
sumber
Collection<>
menjadiIterable<>
?Kode yang Anda miliki adalah cara yang benar untuk melakukannya jika Anda ingin menggunakan JDK tanpa pustaka eksternal. Tidak ada "satu garis" sederhana yang dapat Anda gunakan di JDK.
Jika Anda dapat menggunakan libs eksternal, saya sarankan Anda melihat ke kelas org.apache.commons.lang.StringUtils di pustaka Apache Commons.
Contoh penggunaan:
sumber
Cara ortodoks untuk mencapainya, adalah dengan mendefinisikan fungsi baru:
Sampel:
Keluaran:
sumber
separator
akan jauh lebih sugestif.Solusi Java 8 dengan
java.util.StringJoiner
Java 8 telah mendapat
StringJoiner
kelas. Tetapi Anda masih perlu menulis sedikit boilerplate, karena itu Java.sumber
Anda bisa menggunakan pustaka apache commons yang memiliki kelas StringUtils dan metode bergabung.
Periksa tautan ini: https://commons.apache.org/proper/commons-lang/javadocs/api.2.0/org/apache/commons/lang/StringUtils.html
Perhatikan bahwa tautan di atas dapat menjadi usang seiring waktu, dalam hal ini Anda bisa mencari "apache commons StringUtils" di web, yang memungkinkan Anda menemukan referensi terbaru.
(dirujuk dari utas ini) Java equivalents dari C # String.Format () dan String.Join ()
sumber
Kamu bisa melakukan ini:
Atau satu-liner (hanya ketika Anda tidak ingin '[' dan ']')
Semoga ini membantu.
sumber
Cara yang menyenangkan untuk melakukannya dengan JDK murni, dalam satu tugas:
Keluaran:
Cara yang tidak terlalu sempurna & tidak terlalu menyenangkan!
Keluaran:
sumber
Anda mungkin ingin mencoba metode bergabung bersama Apache Commons StringUtils:
http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#join(java.util.Iterator , java.lang.String)
Saya telah menemukan bahwa Apache StringUtils mengambil slack jdk ;-)
sumber
Jika Anda menggunakan Eclipse Collections (sebelumnya GS Collections ), Anda dapat menggunakan
makeString()
metode ini.Jika Anda dapat mengonversi Anda
List
ke jenis Koleksi Eclipse, maka Anda dapat menyingkirkan adaptor.Jika Anda hanya ingin string yang dipisahkan koma, Anda dapat menggunakan versi
makeString()
yang tidak menggunakan parameter.Catatan: Saya pengendara untuk Eclipse Collections.
sumber
Dengan java 1.8 stream dapat digunakan,
sumber
EDIT
Saya juga memperhatikan
toString()
masalah implementasi yang mendasarinya, dan tentang elemen yang mengandung pemisah tetapi saya pikir saya sedang paranoid.Karena saya punya dua komentar tentang hal itu, saya mengubah jawaban saya ke:
Yang terlihat sangat mirip dengan pertanyaan aslinya.
Jadi, jika Anda tidak ingin menambahkan seluruh toples ke proyek Anda, Anda dapat menggunakan ini.
Saya pikir tidak ada yang salah dengan kode asli Anda. Sebenarnya, alternatif yang disarankan semua orang terlihat hampir sama (meskipun ia melakukan sejumlah validasi tambahan)
Ini dia, bersama dengan lisensi Apache 2.0.
Sekarang kami tahu, terima kasih open source
sumber
", "
?Google Guava API juga memiliki .join (), walaupun (seperti yang seharusnya jelas dengan balasan lainnya), Apache Commons cukup standar di sini.
sumber
Java 8 memang membawa
metode, yaitu nullsafe dengan menggunakan
prefix + suffix
nilai null.Itu dapat digunakan dengan cara berikut:
The
Collectors.joining(CharSequence delimiter)
Metode hanya panggilanjoining(delimiter, "", "")
internal.sumber
Anda dapat menggunakan ini dari StringUtils Spring Framework. Saya tahu ini sudah disebutkan, tetapi Anda benar-benar bisa mengambil kode ini dan langsung berfungsi, tanpa perlu Spring untuk itu.
sumber
Coba ini:
sumber