Bir String bir ArrayList'e nasıl dönüştürülür?


101

Dizimde, virgülle ayrılmış keyfi sayıda kelimeye sahip olabilirim. Her kelimenin bir ArrayList'e eklenmesini istedim. Örneğin:

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

Yanıtlar:


251

Gibi bir şey dene

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]

Bu gönderi burada bir makale olarak yeniden yazılmıştır .


9
+1: new ArrayList<String>()Nasıl kullanıldığına bağlı olarak fazlalık olabilir. (sizin örneğinizde olduğu gibi;)
Peter Lawrey

1
Hehe, evet, +1 :-) Aslında splitonun peşinde bile olabilir : P
aioobe

Arrays.toString()Basmak için kullanması gerekecekti, ama evet.
Peter Lawrey

Yeni ArrayList <String> (), içinde döndürülen liste ile yeni bir listenin oluşturulmasına neden olur. Arrays.asList (a) bir List nesnesi döndürür, bu nedenle new ArrayList'i çağırmayın, istenmeyen davranışlar elde edersiniz.
Clocker

6
Arrays.asList tarafından döndürülen listeye öğe ekleyemeyeceğinizi unutmayın. OP (tamamen makul) bir ArrayList olmasını istedik ve ArrayList inşaat olan gerekli.
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());

8
Parantezleri kırpmanız gerekiyorsa, bunu tek adımda yapabilirsinizreplace = s1.replaceAll("^\\[|]$", "");
David Ehrmann

9

Seçenek1 :

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

Seçenek2 :

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

Bence Seçenek1 daha iyi çünkü

  1. Oluşturulan ArrayList nesnelerinin sayısını 2'den 1'e indirebiliriz. asListyöntemi bir ArrayList Nesnesi oluşturur ve döndürür.
  2. performansı çok daha iyidir (ancak sabit boyutlu bir liste döndürür).

Belgelerine bakın burada


Bu neden işe yaramıyor List<Character> word1 = new ArrayList<Character>(Arrays.asList(A[0].toCharArray()));Bir dize dizisinin ilk String'ini elde etmeye ve bu dizeyi charArray'e ve bu charArray'i List <Character>'a dönüştürmeye çalışıyorum
sofs1

bunun nedeni, Arrays sınıfındaki asList yönteminin ilkel dizileri değil, yalnızca Object dizisini almasıdır. Char [] karakterini Karakter [] dizisine dönüştürürseniz işe yarayacaktır.
Andy

public static Karakter [] boxToCharacter (char [] charArray) {Karakter [] newArray = yeni Karakter [charArray.length]; int i = 0; for (char value: charArray) {newArray [i ++] = Character.valueOf (değer); } newArray döndür; }
Andy

8

Java 9'da List#ofImmutable List Static Factory Metotlarının kullanımı daha basit hale geldi.

 String s = "a,b,c,d,e,.........";
 List<String> lst = List.of(s.split(","));

s.split("\\s*,\\s*")ekstra bakım için eklenebilir
Vishwajit R. Shinde

2

İçe aktarıyorsanız veya kodunuzda bir dizi (dize türünde) varsa ve onu dizi listesine (ders dışı dizge) dönüştürmeniz gerekiyorsa, koleksiyonların kullanılması daha iyidir. bunun gibi:

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

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

2

Tamam, buradaki cevapları genişleteceğim çünkü buraya gelen birçok insan dizeyi bir boşlukla bölmek istiyor . Bu nasıl yapılır:

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

2

Kullanabilirsin:

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

Öncelikle ArrayList'e gerçekten ihtiyacınız olup olmadığını kendinize sormalısınız. Çoğu zaman, bir Akışın mükemmel olduğu ek kriterlere göre listeyi filtreleyeceksiniz. Bir set isteyebilirsiniz; bunları başka bir düzenli ifade vb. kullanarak filtrelemek isteyebilirsiniz. Java 8 bu arada bu çok kullanışlı uzantıyı sağlar ve bu uzantı herhangi bir CharSequence: https://docs.oracle.com/javase/8/docs/api /java/util/regex/Pattern.html#splitAsStream-java.lang.CharSequence- . Diziye hiç ihtiyacınız olmadığından, onu şu şekilde oluşturmaktan kaçının:

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

1

Eğer dönüştürmek istiyorsanız bir dize bir içine ArrayList bu deneyin:

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;
}

Ama sen dönüştürmek istedim eğer öyleyse, sizin örnekte bir dize dizisi bkz dize dizisi içine ArrayList bunu kullanın:

public static ArrayList<String> convertStringArrayToArraylist(String[] strArr){
    ArrayList<String> stringList = new ArrayList<String>();
    for (String s : strArr) {
        stringList.add(s);
    }
    return stringList;
}

Daha basit bir karakter tabanlı yaklaşım şöyle olacaktır: ArrayList <String> myList = new ArrayList <String> (); for (Karakter c: s.toCharArray ()) {myList.add (c.toString ()); } Ama kişinin aradığı şeyin bu olduğunu sanmıyorum. Aioobe'nin çözümü gerekli olan şeydir. Şerefe
Steve

1

Anlaşılması daha kolay şudur:

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

1

Bu Kotlin'de Gson kullanıyor

 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])

0

Bir soruyu ele alalım: Bir Dizgiyi Ters Çevir. Bunu stream (). Collect () kullanarak yapacağım. Ama önce dizeyi bir ArrayList'e değiştireceğim.

    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
*/

1
Öyleyse ... kabul edilen çözümü farklı bir problem hakkında bir örnek oluşturmak için kullanıyorsunuz? neden?
Francesco B.

0

StringTokenizer'ı kullanmanızı tavsiye ederim, çok verimli

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

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.