Java 8 memiliki fungsi ini termasuk di luar kotak. Saya merekomendasikan pembaca untuk menggulir ke jawaban oleh @Marek Gregor (dan meningkatkannya ..)
Demi kepentingan orang yang mencari jawaban ini, mungkin perlu dicatat bahwa ini juga setara dengan gabungan Perl.
k-den
3
ia mengatakan itu tidak didefinisikan untukku
Ninjaxor
@Ninjaxor 1. jar commons-lang * harus berada di classpath 2. import org.apache.commons.lang3.StringUtils;
peterh
9
Saya akan merekomendasikan Anda mengedit jawaban ini untuk menambahkan referensi ke String.join()metode baru yang diperkenalkan di Jawa 8. Dengan cara ini, sejumlah besar orang yang membaca jawaban yang diterima ini akan mendapat manfaat dari pengetahuan itu. Saat ini, jawaban tertinggi yang menyebutkan fakta ini agak hilang di bawah ...
Duncan Jones
1
Perlu disebutkan bahwa String.join()hanya akan berfungsi untuk List<CharSequence>atau CharSequence[]elemen.
Enigo
71
Jika Anda mencari apa yang harus digunakan di Android, itu adalah:
Ini jelas jawaban terbaik untuk semua versi Android, karena Java 8 hanya keluar di Android sedikit. Solusi ini menggunakan lib Android bawaan, daripada solusi konyol ini "sertakan lib besar untuk melakukan satu tindakan".
LukeStoneHm
Ini September 2017, Java 8 untuk Android masih jauh. Terima kasih atas jawaban ini!
Aenadon
57
Di Java 8 Anda bisa menggunakan
1) Aliran API:
String[] a =newString[]{"a","b","c"};String result =Arrays.stream(a).collect(Collectors.joining(", "));
Anda dapat dengan mudah menulis fungsi seperti itu di sekitar sepuluh baris kode:
String combine(String[] s,String glue){int k = s.length;if( k ==0){returnnull;}StringBuilderout=newStringBuilder();out.append( s[0]);for(int x=1; x < k;++x ){out.append(glue).append(s[x]);}returnout.toString();}
Praktek yang baik menurut Anda ... tidak ada standar universal untuk hal-hal seperti itu.
phoebus
24
Tetapi jika saya memasukkan kawat gigi, itu akan menambahkan dua baris kode lagi, dan saya tidak bisa mengklaim telah melakukannya dalam 11 baris!
Jay
8
masalahnya adalah ketika Anda setelah beberapa saat, atau orang lain, dengan tergesa-gesa, tambahkan baris lain untuk itu jika / untuk tanpa menambahkan kawat gigi; atau hapus kembali nol setelah jika (k == 0), yang dalam beberapa kasus akan mengkompilasi tetapi akan salah. Maka lebih baik untuk mengorbankan satu baris tambahan untuk kurung tutup itu (pembukaan bisa tetap di baris if / for yang sama).
milan
16
Saya pikir itu luar biasa bahwa sementara sebagian besar bahasa mengemas fungsionalitas seperti itu ke dalam inti mereka, komunitas Java mendorong semua orang untuk menemukan kembali roda.
John Strickler
33
11 baris? Bah! Saya bisa melakukannya dalam 1! Cukup hapus semua karakter baris baru di file sumber.
Dipilih karena Anda tidak perlu menambahkan perpustakaan apa pun.
givanse
10
Baris 7: Apakah lebih baik jika digunakan .append()dua kali untuk masing-masing Stringalih-alih menggabungkannya dan kemudian menambahkan ke pembangun.
Talha Ahmed Khan
18
Seperti banyak pertanyaan belakangan ini, Java 8 menyelamatkan:
Java 8 menambahkan metode statis baru java.lang.Stringyang melakukan persis apa yang Anda inginkan:
Perpustakaan Google jambu biji juga memiliki kemampuan semacam ini . Anda dapat melihat contoh String [] dari API.
Seperti yang sudah dijelaskan dalam api, berhati-hatilah terhadap ketidakmampuan metode pembangun.
Itu dapat menerima berbagai objek sehingga itu akan berfungsi dalam kasus Anda. Dalam pengalaman saya sebelumnya, saya mencoba bergabung dengan Stack yang merupakan iterable dan berfungsi dengan baik.
Gunakan StringBuilder (non-thread-safe) sebagai pengganti StringBuffer (thread-safe) untuk kinerja yang lebih baik. Antarmukanya sama.
Asaf
2
Ini sepertinya dari snippets.dzone.com/posts/show/91 . Komentar menyarankan versi yang jauh lebih baik: public static String join (Iterable <? Extends Object> pColl, String separator) {Iterator <? extends Object> oIter; if (pColl == null || (! (oIter = pColl.iterator ()) .hasNext ())) mengembalikan ""; StringBuilder oBuilder = StringBuilder baru (String.valueOf (oIter.next ())); while (oIter.hasNext ()) oBuilder.append (separator) .append (oIter.next ()); return oBuilder.toString (); }
Quantum7
6
Jika Anda mendarat di sini mencari konversi array-ke-string cepat, coba Array.toString () .
Membuat representasi String dari yang Object[]berlalu. Hasilnya dikelilingi oleh tanda kurung ( "[]"), setiap elemen dikonversi ke String melalui String.valueOf(Object)dan dipisahkan oleh ", ". Jika arraynya
null, maka "null"dikembalikan.
TERIMA KASIH BANYAK! Senar dipisahkan oleh "," dan semuanya memiliki "[]" di sekitarnya, yang baik untuk saya.
John Henckel
5
Hanya untuk tantangan "Saya yang terpendek" , berikut adalah tambang;)
Berulang:
publicstaticString join(String s,Object... a){StringBuilder o =newStringBuilder();for(Iterator<Object> i =Arrays.asList(a).iterator(); i.hasNext();)
o.append(i.next()).append(i.hasNext()? s :"");return o.toString();}
Apakah Anda suka cara 3-baris saya hanya menggunakan metode kelas String?
staticStringjoin(String glue,String[] array){String line ="";for(String s : array) line += s + glue;return(array.length ==0)? line : line.substring(0, line.length()- glue.length());}
Jika Anda menggunakan perpustakaan Java Fungsional dan karena alasan tertentu tidak dapat menggunakan Streaming dari Java 8 (yang mungkin terjadi saat menggunakan plugin Android + Retrolambda), berikut adalah solusi fungsional untuk Anda:
Ini hanya bekerja dengan pembatas dengan panjang 1 dan membutuhkan 'angka ajaib' (meskipun cukup lokal) jika Anda ingin pembatas dengan panjang yang berbeda.
maiwald
Anda dapat menambahkan beberapa karakter saat menambahkan
Gaurav Adurkar
daripada sekadar: op = op.substring (0, op.length () - ",". length ()); apa masalahnya?
Dennis
-3
java.util.Arrays memiliki metode 'asList'. Bersama dengan java.util.List / ArrayList API ini memberi Anda semua yang Anda butuhkan:;
privatestaticString[]join(String[] array1,String[] array2){List<String> list =newArrayList<String>(Arrays.asList(array1));
list.addAll(Arrays.asList(array2));return list.toArray(newString[0]);}
Jawaban:
Mulai dari Java8 dimungkinkan untuk digunakan
String.join()
.Menghasilkan:
Jika tidak, Apache Commons Lang memiliki
StringUtils
kelas yang memilikijoin
fungsi yang akan bergabung dengan array untuk membuatString
.Sebagai contoh:
Menghasilkan yang berikut
String
:sumber
String.join()
metode baru yang diperkenalkan di Jawa 8. Dengan cara ini, sejumlah besar orang yang membaca jawaban yang diterima ini akan mendapat manfaat dari pengetahuan itu. Saat ini, jawaban tertinggi yang menyebutkan fakta ini agak hilang di bawah ...String.join()
hanya akan berfungsi untukList<CharSequence>
atauCharSequence[]
elemen.Jika Anda mencari apa yang harus digunakan di Android, itu adalah:
sebagai contoh:
sumber
Di Java 8 Anda bisa menggunakan
1) Aliran API:
2) metode String.join baru: https://stackoverflow.com/a/21756398/466677
3) kelas java.util.StringJoiner: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
sumber
Anda dapat dengan mudah menulis fungsi seperti itu di sekitar sepuluh baris kode:
sumber
Mod kecil alih-alih menggunakan substring ():
sumber
.append()
dua kali untuk masing-masingString
alih-alih menggabungkannya dan kemudian menambahkan ke pembangun.Seperti banyak pertanyaan belakangan ini, Java 8 menyelamatkan:
Java 8 menambahkan metode statis baru
java.lang.String
yang melakukan persis apa yang Anda inginkan:Menggunakannya:
Hasil dalam:
sumber
Perpustakaan Google jambu biji juga memiliki kemampuan semacam ini . Anda dapat melihat contoh String [] dari API.
Seperti yang sudah dijelaskan dalam api, berhati-hatilah terhadap ketidakmampuan metode pembangun.
Itu dapat menerima berbagai objek sehingga itu akan berfungsi dalam kasus Anda. Dalam pengalaman saya sebelumnya, saya mencoba bergabung dengan Stack yang merupakan iterable dan berfungsi dengan baik.
Contoh dari saya:
mencetak:
|i am a coder|
sumber
Diberikan:
Kemudian sebagai alternatif untuk jawaban coobird, di mana lemnya adalah ",":
Atau untuk digabungkan dengan string yang berbeda, seperti "& amp;".
Namun ... ini HANYA berfungsi jika Anda tahu bahwa nilai-nilai dalam array atau daftar JANGAN berisi string karakter ",".
sumber
Arrays.asList(a).toString()
bekerja untuk apa yang ingin saya lakukanJika Anda menggunakan Spring Framework maka Anda memiliki kelas StringUtils :
sumber
Tidak pada intinya, tidak. Pencarian untuk "java array join string lem" akan memberi Anda beberapa cuplikan kode tentang cara mencapai ini.
misalnya
sumber
Jika Anda mendarat di sini mencari konversi array-ke-string cepat, coba Array.toString () .
sumber
Hanya untuk tantangan "Saya yang terpendek" , berikut adalah tambang;)
Berulang:
Rekursif:
sumber
copyOfRange()
").Tidak ada built-in yang saya ketahui.
Apache Commons Lang memiliki kelas yang disebut
StringUtils
yang berisi banyak fungsi bergabung.sumber
Beginilah cara saya melakukannya.
sumber
Alternatif serupa
sumber
Putaran saya.
sumber
Apakah Anda suka cara 3-baris saya hanya menggunakan metode kelas String?
sumber
StringBuilder
jika Anda memerlukan efisiensi: PUntuk mendapatkan "str1, str2" dari "str1", "str2", "":
Anda juga dapat menambahkan cek-nol tambahan
sumber
Jika Anda menggunakan perpustakaan Java Fungsional dan karena alasan tertentu tidak dapat menggunakan Streaming dari Java 8 (yang mungkin terjadi saat menggunakan plugin Android + Retrolambda), berikut adalah solusi fungsional untuk Anda:
Perhatikan bahwa ini bukan pendekatan yang paling efisien, tetapi berhasil untuk daftar kecil.
sumber
Saya melakukannya dengan cara ini menggunakan StringBuilder:
sumber
s + delimiter
(rangkaian string dengan operator plus) mengalahkan seluruh tujuan penggunaan aStringBuilder
.sumber
java.util.Arrays memiliki metode 'asList'. Bersama dengan java.util.List / ArrayList API ini memberi Anda semua yang Anda butuhkan:;
sumber