Apakah ada metode built-in di Jawa yang memungkinkan kita untuk mengkonversi String yang dipisahkan koma ke beberapa wadah (misalnya array, Daftar atau Vektor)? Atau apakah saya perlu menulis kode khusus untuk itu?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
java
string
collections
split
Jame
sumber
sumber
Jawaban:
Konversi String yang dipisahkan koma ke Daftar
Kode di atas membagi string pada pembatas yang didefinisikan sebagai:
zero or more whitespace, a literal comma, zero or more whitespace
yang akan menempatkan kata-kata ke dalam daftar dan menciutkan spasi putih antara kata dan koma.Harap dicatat bahwa ini mengembalikan hanya pembungkus pada array: Anda TIDAK BISA misalnya
.remove()
dari hasilList
. Untuk aktual,ArrayList
Anda harus menggunakan lebih lanjutnew ArrayList<String>
.sumber
\s
cocok dengan ruang putih mana pun, The*
menerapkan nol pertandingan atau lebih banyak kali. Jadi\s*
berarti "cocok dengan nol spasi putih atau lebih banyak". Kami mencari ini sebelum dan sesudah koma. Oleh karena itu, perpecahan akan bekerja untuk string seperti"item1 , item2 , item3"
, atau"item1,item2 ,item3"
, dll. Di Jawa, Anda harus menghindari backslash dalam string, sehingga Anda dapat\\s*
"[\\s,]+"
spasi putih untuk nilai. Misalnya," item1 , item2 , item3 , "
menjadi["item1", "item2", "item3"]
."[\\s,]+"
juga akan terpecah pada ruang internal dalam tanda yang dipisahkan koma, itu akan memperlakukan kedua spasi putih sebagai pembatas bahkan ketika koma tidak ada, bukan koma ditambah sejumlah spasi putih sekitarnya."\\s*(,\\s*)+"
akan memangkas spasi putih hanya di sekitar token yang dipisahkan koma, dan juga mengabaikan string apa pun yang hanya spasi kosong atau kosong.Arrays.asList
mengembalikan ukuran tetap yangList
didukung oleh array. Jika Anda ingin dapat berubah normal,java.util.ArrayList
Anda perlu melakukan ini:Atau, menggunakan Jambu Biji :
Menggunakan a
Splitter
memberi Anda lebih banyak fleksibilitas dalam cara Anda memisahkan string dan memberi Anda kemampuan untuk, misalnya, melewatkan string kosong dalam hasil dan memangkas hasil. Ini juga memiliki perilaku yang kurang aneh daripadaString.split
dan tidak mengharuskan Anda untuk membelah dengan regex (itu hanya satu opsi).sumber
Arrays.asList
menyediakan pembungkus di sekitar array asli (menghindari salinan elemen),new ArrayList(...)
justru akan melakukan elemen seperti itu dengan menyalin elemen. Kita mungkin lebih suka pendekatan yang memungkinkan elemen yang diurai ditambahkan langsung ke koleksi target yang diinginkan.Dua langkah:
String [] items = commaSeparated.split("\\s*,\\s*");
List<String> container = Arrays.asList(items);
sumber
split
diartikan sebagai RegEx.Berikut ini satu lagi untuk mengonversi CSV ke ArrayList:
Mencetak Anda
sumber
Jika a
List
adalah tujuan akhir seperti yang dinyatakan OP, maka jawaban yang sudah diterima masih yang terpendek dan terbaik. Namun saya ingin memberikan alternatif menggunakan Java 8 Streams , yang akan memberi Anda lebih banyak manfaat jika itu merupakan bagian dari pipa untuk diproses lebih lanjut.Dengan membungkus hasil dari fungsi .split (array asli) ke dalam aliran dan kemudian mengkonversi ke daftar.
Jika penting bahwa hasilnya disimpan
ArrayList
sesuai dengan judul dari OP, Anda dapat menggunakanCollector
metode yang berbeda :Atau dengan menggunakan api parsing RegEx:
Perhatikan bahwa Anda masih bisa mempertimbangkan untuk membiarkan
list
variabel yang diketik sebagaiList<String>
penggantiArrayList<String>
. Antarmuka generik untukList
masih terlihat cukup mirip denganArrayList
implementasinya.Dengan sendirinya, contoh-contoh kode ini sepertinya tidak menambahkan banyak (kecuali mengetik lebih banyak), tetapi jika Anda berencana untuk berbuat lebih banyak, seperti yang dicontohkan pada konversi String ke Daftar yang Panjang , API streaming sangat kuat dengan memungkinkan untuk menyalurkan operasi Anda satu demi satu.
Demi, Anda tahu, kelengkapan.
sumber
sumber
collect(toList())
menjadicollect(Collectors.toList()
collect(toList())
menggunakan impor statisCollectors.toList()
untuk singkatnya dan kelancaran :)Tidak ada metode bawaan untuk ini, tetapi Anda cukup menggunakan metode split () dalam hal ini.
sumber
Itu seharusnya bekerja untuk Anda.
sumber
Anda dapat menggabungkan asList dan split
sumber
Kode ini akan membantu,
sumber
Anda dapat menggunakan Guava untuk membagi string, dan mengubahnya menjadi ArrayList. Ini berfungsi dengan string kosong juga, dan mengembalikan daftar kosong.
output sebagai berikut:
sumber
Contoh menggunakan
Collections
.sumber
Ada banyak cara untuk menyelesaikan ini dengan menggunakan stream di Java 8 tetapi IMO yang berikut ini lurus ke depan:
sumber
Pertama-tama Anda dapat membaginya menggunakan
String.split(",")
, dan kemudian mengonversi String yang dikembalikanarray
keArrayList
menggunakanArrays.asList(array)
sumber
Di groovy, Anda dapat menggunakan metode tokenize (Token Karakter):
sumber
Hasil yang sama dapat Anda capai dengan menggunakan kelas Splitter.
(ditulis dalam kotlin)
sumber
sumber
Saya biasanya menggunakan pola yang sudah dikompilasi untuk daftar. Dan juga ini sedikit lebih universal karena dapat mempertimbangkan tanda kurung yang mengikuti beberapa ekspresi listToString.
sumber
Di Kotlin jika daftar String Anda seperti ini dan Anda dapat menggunakan untuk mengonversi string ke ArrayList, gunakan baris kode ini
sumber
sumber
Anda dapat melakukannya sebagai berikut.
Ini menghilangkan ruang putih dan membelah dengan koma di mana Anda tidak perlu khawatir tentang ruang putih.
sumber
String -> Conversation Collection : (String -> String [] -> Collection)
Koleksi -> konversi String [] :
String -> String [] konversi:
Dan Koleksi -> Koleksi :
sumber
konversi Collection menjadi string sebagai koma yang dipisahkan di Java 8
objek listOfString berisi elemen ["A", "B", "C", "D" ]-
Output adalah: - 'A', 'B', 'C', 'D'
Dan Mengkonversi String Array ke Daftar di Java 8
sumber
sumber
ArrayList
? Apakah Anda bahkan membaca pertanyaannya?ArrayList
. Saya memutar kembali hasil edit ke revisi pertama (sehingga Anda dapat melihatnya) dan meningkatkan format revisi pertama.