Bagaimana cara memisahkan string yang dipisahkan koma?


202

Saya memiliki String dengan panjang yang tidak diketahui yang terlihat seperti ini

"dog, cat, bear, elephant, ..., giraffe"

Apa cara optimal untuk membagi string ini di koma sehingga setiap kata dapat menjadi elemen dari ArrayList?

Sebagai contoh

List<String> strings = new ArrayList<Strings>();
// Add the data here so strings.get(0) would be equal to "dog",
// strings.get(1) would be equal to "cat" and so forth.

1
gunakan metode split ("spliting char") itu membagi string Anda dan metode akan membuat string-array dengan kata-kata terpecah.
Simon Dorociak

Jawaban:


343

Anda bisa melakukan ini:

String str = "...";
List<String> elephantList = Arrays.asList(str.split(","));

Pada dasarnya .split()metode ini akan membagi string sesuai dengan (dalam kasus ini) pembatas yang Anda lewati dan akan mengembalikan array string.

Namun, Anda tampaknya lebih memilih Daftar String daripada array, jadi array harus diubah menjadi daftar dengan menggunakan Arrays.asList()utilitas. Sama seperti FYI, Anda juga dapat melakukan sesuatu seperti:

String str = "...";
ArrayList<String> elephantList = new ArrayList<>(Arrays.asList(str.split(","));

Tapi biasanya praktik yang lebih baik untuk memprogram ke antarmuka daripada ke implementasi nyata yang sebenarnya, jadi saya akan merekomendasikan opsi 1.


9
Perlu diingat ini tidak akan memotong nilai sehingga strings.get (1) akan menjadi "kucing" bukan "kucing"
Alb

45
str.splitmenerima regex sehingga Anda dapat menggunakan str.split(",[ ]*");sehingga Anda menghapus koma dan spasi setelah koma.
vertti

4
File yang dibatasi koma (csv) mungkin memiliki koma dalam tanda kutip, yang berarti itu bukan pembatas. Dalam hal ini Split tidak akan berfungsi.
Steven Trigg

2
Opsi kedua membutuhkan sebagai dilemparkan ke ArrayList<String>.
C_B

3
Jika Anda perlu menyimpan entri kosong (mis. Untuk panjang array yang konsisten) gunakan split (",", - 1) sesuai stackoverflow.com/questions/14602062/…
Fast Engy

157

Anda ingin berpisah , bukan?

String animals = "dog, cat, bear, elephant, giraffe";

String[] animalsArray = animals.split(",");

Jika Anda ingin menyingkirkan spasi putih di sekitar item:

String[] animalsArray = animals.split("\\s*,\\s*");

Ya itu bagian dari solusinya. OP tampaknya setelah Daftar String, bukan array.
npinti

@ npinti: ya, +1 untuk Anda, Anda lebih cepat dan saya tidak ingin menyalin Arrays.asList()idiom Anda .
Tomasz Nurkiewicz

1
Saya terus berpikir selama 10 jam, lalu mencari SO. tidak tahu bahwa itu sangat mudah .split ();
DeathRs

Bagaimana jika Anda ingin menyimpan item split yang dihasilkan dalam satu set daripada dalam dalam sebuah Array?
Moses Kirathe

29

Anda dapat membaginya dan membuat array kemudian mengakses seperti array

String names = "prappo,prince";
String[] namesList = names.split(",");

Anda dapat mengakses suka

String name1 = namesList [0];
String name2 = namesList [1];

atau menggunakan loop

for(String name : namesList){
System.out.println(name);
}

berharap ini akan membantu anda.


18

Peningkatan kecil: solusi di atas tidak akan menghapus spasi awal atau spasi di dalam String sebenarnya. Lebih baik untuk memanggil trim sebelum memanggil split. Alih-alih ini,

 String[] animalsArray = animals.split("\\s*,\\s*");

menggunakan

 String[] animalsArray = animals.trim().split("\\s*,\\s*");

1
untuk baris kedua, jika kita menggunakan trim () maka kita tidak perlu spasi seperti ("\\s*,\\s*")hanya menggunakan (",");ini akan menghasilkan hasil yang sama.
WIZARD

5
Saya tidak yakin dengan @ WIZARD karena trim hanya menghapus ruang kiri dan kanan string, tetapi tidak ruang di dalamnya. Jadi itu trim(" string, with , space ")akan terjadi "string, with , space".
Thomas Leduc

@ThomasLeduc jika string seperti ini "dog, cat, bear, elephant, giraffe"maka tidak perlu trim()dan dalam kasus Anda jika digunakan trim()maka put akan "string,with,space"bukan ini"string, with , space"
WIZARD

trim()akan menghapus semua spasi tidak hanya ruang kiri dan kanan string
WIZARD

5
Apakah Anda mengujinya? karena saya baru saja menulis program java dan string " string, with , space ".trim()kembali "string, with , space". Seperti kata javadoc: mengembalikan salinan string, dengan spasi spasi awal dan akhir dihapus. Anda salah dan @ user872858 benar.
Thomas Leduc

3

Pertama, Anda dapat membagi nama seperti ini

String animals = "dog, cat, bear, elephant,giraffe";

String animals_list[] = animals.split(",");

Mengakses binatang Anda

String animal1 = animals_list[0];
String animal2 = animals_list[1];
String animal3 = animals_list[2];
String animal4 = animals_list[3];

Dan juga Anda ingin menghapus spasi putih dan koma di sekitar nama binatang

String animals_list[] = animals.split("\\s*,\\s*");

3

Untuk kelengkapan, menggunakan perpustakaan Guava , Anda akan melakukan: Splitter.on(",").split(“dog,cat,fox”)

Contoh lain:

String animals = "dog,cat, bear,elephant , giraffe ,  zebra  ,walrus";
List<String> l = Lists.newArrayList(Splitter.on(",").trimResults().split(animals));
// -> [dog, cat, bear, elephant, giraffe, zebra, walrus]

Splitter.split()mengembalikan Iterable, jadi jika Anda memerlukan Daftar, bungkus seperti di Lists.newArrayList()atas. Kalau tidak pergi saja dengan Iterable, misalnya:

for (String animal : Splitter.on(",").trimResults().split(animals)) {
    // ...
}

Perhatikan bagaimana trimResults()menangani semua kebutuhan pemangkasan Anda tanpa harus mengubah regex untuk kasus sudut , seperti halnya String.split().

Jika proyek Anda sudah menggunakan Jambu Biji, ini harus menjadi solusi pilihan Anda. Lihat dokumentasi Splitter di Panduan Pengguna Guava atau javadocs untuk opsi konfigurasi lainnya.


2

Dapat mencoba ini bekerja untuk saya

 sg = sg.replaceAll(", $", "");

atau

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }

1

di build.gradle tambahkan Guava

    compile group: 'com.google.guava', name: 'guava', version: '27.0-jre'

lalu

    public static List<String> splitByComma(String str) {
    Iterable<String> split = Splitter.on(",")
            .omitEmptyStrings()
            .trimResults()
            .split(str);
    return Lists.newArrayList(split);
    }

    public static String joinWithComma(Set<String> words) {
        return Joiner.on(", ").skipNulls().join(words);
    }

Nikmati :)


0

Hapus semua spasi putih dan buat Daftar ukuran tetap atau tidak dapat diubah (Lihat asList API API )

final String str = "dog, cat, bear, elephant, ..., giraffe";
List<String> list = Arrays.asList(str.replaceAll("\\s", "").split(","));
// result: [dog, cat, bear, elephant, ..., giraffe]

Dimungkinkan juga untuk menggunakan replaceAll(\\s+", "")tetapi efisiensi maksimum tergantung pada kasus penggunaan. (lihat jawaban @GurselKoca untuk Menghapus spasi putih dari string di Jawa )


0

Anda dapat menggunakan sesuatu seperti ini:

String animals = "dog, cat, bear, elephant, giraffe";

List<String> animalList = Arrays.asList(animals.split(","));

Anda juga akan memasukkan libs:

import java.util.ArrayList;
import java.util.Arrays; 
import java.util.List;


0

Di Kotlin,

val stringArray = commasString.replace(", ", ",").split(",")

di mana stringArrayadalah List<String>dan commasStringadalah Stringdengan koma dan spasi


0

Ini adalah cara mudah untuk memisahkan string dengan koma,

import java.util.*;

public class SeparatedByComma{
public static void main(String []args){
     String listOfStates = "Hasalak, Mahiyanganaya, Dambarawa, Colombo";
     List<String> stateList = Arrays.asList(listOfStates.split("\\,"));
     System.out.println(stateList);
 }
}

Kode ini saya gunakan untuk JDK. Dan jika Anda perlu mencetak array. gunakan System.out.println
Sandun Susantha

-1

Ada fungsi yang disebut replaceAll()yang dapat menghapus semua spasi putih dengan menggantinya dengan apa pun yang Anda inginkan. Sebagai contoh

String str="  15. 9 4;16.0 1"
String firstAndSecond[]=str.replaceAll("\\s","").split(";");
System.out.println("First:"+firstAndSecond[0]+", Second:"+firstAndSecond[1]);

akan memberimu:

First:15.94, Second:16.01
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.