Wie konvertiere ich einen String in eine ArrayList?


100

In meinem String kann ich eine beliebige Anzahl von Wörtern haben, die durch Kommas getrennt sind. Ich wollte, dass jedes Wort in eine ArrayList aufgenommen wird. Z.B:

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

Antworten:


251

Versuchen Sie etwas wie

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]

Dieser Beitrag wurde bereits als ein Artikel neu geschrieben hier .


9
+1: Je nach Verwendung new ArrayList<String>()kann das redundant sein. (wie es in Ihrem Beispiel ist;)
Peter Lawrey

1
Hehe, ja, +1 :-) Es kann tatsächlich sogar nur sein split
Nachher

Er würde es benutzen müssen Arrays.toString(), um es zu drucken, aber ja.
Peter Lawrey

Die neue ArrayList <String> () bewirkt, dass eine neue Liste mit der darin enthaltenen zurückgegebenen Liste erstellt wird. Arrays.asList (a) gibt ein List-Objekt zurück. Rufen Sie daher keine neue ArrayList auf, da dies zu unerwünschtem Verhalten führt.
Clocker

6
Beachten Sie, dass Sie der von Arrays.asList zurückgegebenen Liste keine Elemente hinzufügen können. Das OP wollte eine ArrayList (was völlig vernünftig ist) und die ArrayList-Konstruktion ist notwendig.
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
Wenn Sie Klammern kürzen müssen, können Sie dies in einem Schritt mitreplace = s1.replaceAll("^\\[|]$", "");
David Ehrmann

9

Option 1 :

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

Option 2 :

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

Meiner Meinung nach ist Option1 besser, weil

  1. Wir können die Anzahl der ArrayList-Objekte, die erstellt werden, von 2 auf 1 reduzieren. Die asListMethode erstellt ein ArrayList-Objekt und gibt es zurück.
  2. Die Leistung ist viel besser (es wird jedoch eine Liste mit fester Größe zurückgegeben).

Bitte beachten Sie die Dokumentation hier


Warum funktioniert das nicht List<Character> word1 = new ArrayList<Character>(Arrays.asList(A[0].toCharArray()));? Ich versuche, den ersten String eines String-Arrays zu erhalten und diesen String in charArray und diesen charArray in List <Character> zu
konvertieren

Dies liegt daran, dass die asList-Methode in der Arrays-Klasse nur Object-Arrays und keine primitiven Arrays verwendet. Wenn Sie char [] in Character [] Array konvertieren, funktioniert es.
Andy

öffentliches statisches Zeichen [] boxToCharacter (char [] charArray) {Zeichen [] newArray = neues Zeichen [charArray.length]; int i = 0; for (char value: charArray) {newArray [i ++] = Character.valueOf (value); } return newArray; }
Andy

8

In Java 9 wird die Verwendung List#ofeiner statischen Factory-Methode mit unveränderlicher Liste einfacher.

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

2

Wenn Sie importieren oder ein Array (vom Typ string) in Ihrem Code haben und es in eine Arrayliste (offcourse string) konvertieren müssen, ist die Verwendung von Sammlungen besser. so was:

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

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

2

Ok, ich werde hier auf die Antworten eingehen, da viele Leute, die hierher kommen, die Zeichenfolge durch ein Leerzeichen teilen möchten . So wird's gemacht:

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

2

Du könntest benutzen:

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

Sie sollten sich fragen, ob Sie die ArrayList überhaupt brauchen. Sehr oft filtern Sie die Liste nach zusätzlichen Kriterien, für die ein Stream perfekt ist. Vielleicht möchten Sie ein Set; Möglicherweise möchten Sie sie mithilfe eines anderen regulären Ausdrucks usw. filtern. Java 8 bietet übrigens diese sehr nützliche Erweiterung, die unter folgenden Bedingungen funktioniert CharSequence: https://docs.oracle.com/javase/8/docs/api /java/util/regex/Pattern.html#splitAsStream-java.lang.CharSequence- . Da Sie das Array überhaupt nicht benötigen, vermeiden Sie es, es folgendermaßen zu erstellen:

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

Wenn Sie einen String in eine ArrayList konvertieren möchten, versuchen Sie Folgendes :

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

Aber ich sehe ein String-Array in Ihrem Beispiel. Wenn Sie also ein String-Array in ArrayList konvertieren möchten, verwenden Sie Folgendes :

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

Ein einfacherer zeichenbasierter Ansatz wäre: ArrayList <String> myList = new ArrayList <String> (); für (Zeichen c: s.toCharArray ()) {myList.add (c.toString ()); } Aber ich glaube nicht, dass die Person danach sucht. Die Lösung von aioobe ist erforderlich. Prost
Steve

1

Einfacher zu verstehen ist wie folgt:

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

1

Dies verwendet Gson in 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])

0

Nehmen wir eine Frage: Kehren Sie einen String um. Ich werde dies mit stream () tun. Collect (). Aber zuerst werde ich den String in eine ArrayList ändern.

    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
Also ... verwenden Sie die akzeptierte Lösung, um ein Beispiel für ein anderes Problem zu erstellen? Warum?
Francesco B.

0

Ich empfehle den StringTokenizer, ist sehr effizient

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.