Bagaimana cara mengubah String menjadi ArrayList?

101

Di String saya, saya dapat memiliki sejumlah kata acak yang dipisahkan koma. Saya ingin setiap kata ditambahkan ke dalam ArrayList. Misalnya:

String s = "a,b,c,d,e,.........";
Sameek Mishra
sumber

Jawaban:

251

Cobalah sesuatu seperti

List<String> myList = new ArrayList<String>(Arrays.asList(s.split(",")));

Demo:

String s = "lorem,ipsum,dolor,sit,amet";

List<String> myList = new ArrayList<String>(Arrays.asList(s.split(",")));

System.out.println(myList);  // prints [lorem, ipsum, dolor, sit, amet]

Posting ini telah ditulis ulang sebagai artikel di sini .

aioobe
sumber
9
+1: new ArrayList<String>()Mungkin berlebihan tergantung bagaimana penggunaannya. (seperti dalam contoh Anda;)
Peter Lawrey
1
Hehe, yeah, +1 :-) Bahkan mungkin saja splitsetelahnya: P
aioobe
Dia harus menggunakannya Arrays.toString()untuk mencetaknya, tapi ya.
Peter Lawrey
ArrayList baru <String> () menyebabkan daftar baru dibuat dengan daftar yang dikembalikan di dalamnya. Arrays.asList (a) mengembalikan objek List sehingga jangan memanggil ArrayList baru, Anda akan mendapatkan perilaku yang tidak diinginkan.
Clocker
6
Perhatikan bahwa Anda tidak dapat menambahkan elemen ke daftar yang dikembalikan oleh Arrays.asList. OP ingin memiliki ArrayList (yang benar-benar masuk akal) dan pembangunan ArrayList adalah diperlukan.
aioobe
32
 String s1="[a,b,c,d]";
 String replace = s1.replace("[","");
 System.out.println(replace);
 String replace1 = replace.replace("]","");
 System.out.println(replace1);
 List<String> myList = new ArrayList<String>(Arrays.asList(replace1.split(",")));
 System.out.println(myList.toString());
Sameek Mishra
sumber
8
Jika Anda harus memangkas tanda kurung, Anda dapat melakukannya dalam satu langkah denganreplace = s1.replaceAll("^\\[|]$", "");
David Ehrmann
9

Option1 :

List<String> list = Arrays.asList("hello");

Option2 :

List<String> list = new ArrayList<String>(Arrays.asList("hello"));

Menurut saya, Option1 lebih baik karena

  1. kita dapat mengurangi jumlah objek ArrayList yang dibuat dari 2 menjadi 1. asListmetode membuat dan mengembalikan Objek ArrayList.
  2. kinerjanya jauh lebih baik (tetapi mengembalikan daftar ukuran tetap).

Silakan lihat dokumentasi di sini

Andy
sumber
Mengapa ini tidak berhasil List<Character> word1 = new ArrayList<Character>(Arrays.asList(A[0].toCharArray()));Saya mencoba untuk mendapatkan String pertama dari sebuah array string, dan mengubah string itu menjadi charArray dan charArray itu ke List <Character>
sofs1
Itu karena, metode asList di kelas Array hanya mengambil larik Objek, bukan larik primitif. Jika Anda mengonversi char [] menjadi array Karakter [], itu akan berfungsi.
Andy
public static Karakter [] boxToCharacter (char [] charArray) {Karakter [] newArray = Karakter baru [charArray.length]; int i = 0; untuk (nilai karakter: charArray) {newArray [i ++] = Character.valueOf (value); } kembali newArray; }
Andy
8

Di Java 9, penggunaan List#of, yang merupakan Metode Pabrik Statis Daftar Tidak Dapat Diubah, menjadi lebih sederhana.

 String s = "a,b,c,d,e,.........";
 List<String> lst = List.of(s.split(","));
Ravi
sumber
s.split("\\s*,\\s*")dapat ditambahkan untuk perawatan ekstra
Vishwajit R. Shinde
2

Jika Anda mengimpor atau Anda memiliki array (tipe string) dalam kode Anda dan Anda harus mengubahnya menjadi daftar array (string offcourse) maka penggunaan koleksi lebih baik. seperti ini:

String array1[] = getIntent().getExtras().getStringArray("key1"); or String array1[] = ... then

List allEds = new ArrayList(); Collections.addAll(allEds, array1);
Andy
sumber
2

Oke, saya akan memperluas jawaban di sini karena banyak orang yang datang ke sini ingin membagi string dengan spasi . Beginilah caranya:

List<String> List = new ArrayList<String>(Arrays.asList(s.split("\\s+")));
Gherbi Hicham
sumber
2

Anda bisa menggunakan:

List<String> tokens = Arrays.stream(s.split("\\s+")).collect(Collectors.toList());

Anda harus bertanya pada diri sendiri apakah Anda benar-benar membutuhkan ArrayList sejak awal. Sangat sering, Anda akan memfilter daftar berdasarkan kriteria tambahan, yang alirannya sempurna. Anda mungkin menginginkan satu set; Anda mungkin ingin memfilternya dengan menggunakan ekspresi reguler lain, dll. Java 8 menyediakan ekstensi yang sangat berguna ini, yang akan bekerja pada CharSequence: https://docs.oracle.com/javase/8/docs/api /java/util/regex/Pattern.html#splitAsStream-java.lang.CharSequence- . Karena Anda tidak membutuhkan array sama sekali, hindari membuatnya seperti ini:

// This will presumably be a static final field somewhere.
Pattern splitter = Pattern.compile("\\s+");
// ...
String untokenized = reader.readLine();
Stream<String> tokens = splitter.splitAsStream(untokenized);
AbuNassar
sumber
1

Jika Anda ingin mengubah string menjadi ArrayList, coba ini:

public ArrayList<Character> convertStringToArraylist(String str) {
    ArrayList<Character> charList = new ArrayList<Character>();      
    for(int i = 0; i<str.length();i++){
        charList.add(str.charAt(i));
    }
    return charList;
}

Tetapi saya melihat array string dalam contoh Anda, jadi jika Anda ingin mengubah array string menjadi ArrayList gunakan ini:

public static ArrayList<String> convertStringArrayToArraylist(String[] strArr){
    ArrayList<String> stringList = new ArrayList<String>();
    for (String s : strArr) {
        stringList.add(s);
    }
    return stringList;
}
denolk
sumber
Pendekatan berbasis karakter yang lebih sederhana adalah: ArrayList <String> myList = new ArrayList <String> (); untuk (Karakter c: s.toCharArray ()) {myList.add (c.toString ()); } Tapi menurut saya ini bukan yang dicari orang itu. Solusi oleh aioobe adalah apa yang dibutuhkan. bersulang
Steve
1

Yang lebih mudah dipahami adalah seperti ini:

String s = "a,b,c,d,e";
String[] sArr = s.split(",");
List<String> sList = Arrays.asList(sArr);
Abay
sumber
1

Ini menggunakan Gson di Kotlin

 val listString = "[uno,dos,tres,cuatro,cinco]"
 val gson = Gson()
 val lista = gson.fromJson(listString , Array<String>::class.java).toList()
 Log.e("GSON", lista[0])
Felix A Marrero Pentón
sumber
0

Mari kita ajukan pertanyaan: Membalikkan String. Saya akan melakukan ini menggunakan stream (). Collect (). Tapi pertama-tama saya akan mengubah string menjadi ArrayList.

    public class StringReverse1 {
    public static void main(String[] args) {

        String a = "Gini Gina  Proti";

        List<String> list = new ArrayList<String>(Arrays.asList(a.split("")));

        list.stream()
        .collect(Collectors.toCollection( LinkedList :: new ))
        .descendingIterator()
        .forEachRemaining(System.out::println);



    }}
/*
The output :
i
t
o
r
P


a
n
i
G

i
n
i
G
*/
Soudipta Dutta
sumber
1
jadi ... Anda menggunakan solusi yang diterima untuk membuat contoh tentang masalah yang berbeda? Mengapa?
Francesco B.
0

Saya merekomendasikan menggunakan StringTokenizer, sangat efisien

     List<String> list = new ArrayList<>();

     StringTokenizer token = new StringTokenizer(value, LIST_SEPARATOR);
     while (token.hasMoreTokens()) {
           list.add(token.nextToken());
     }
Philippe
sumber
0

Jika Anda menggunakan jambu biji (dan seharusnya, lihat item java efektif # 15 ):

ImmutableList<String> list = ImmutableList.copyOf(s.split(","));
sabujp
sumber