Come convertire una stringa in un ArrayList?


101

Nella mia stringa, posso avere un numero arbitrario di parole separate da virgole. Volevo che ogni parola fosse aggiunta in un ArrayList. Per esempio:

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

Risposte:


251

Prova qualcosa di simile

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]

Questo post è stato riscritto come articolo qui .


9
+1: new ArrayList<String>()potrebbe essere ridondante a seconda di come viene utilizzato. (come nel tuo esempio;)
Peter Lawrey

1
Hehe, sì, +1 :-) Potrebbe anche essere solo il splitsuo dopo: P
aioobe

Avrebbe dovuto usarlo Arrays.toString()per stamparlo, ma sì.
Peter Lawrey

Il nuovo ArrayList <String> () fa sì che venga creato un nuovo elenco con l'elenco restituito al suo interno. Arrays.asList (a) restituisce un oggetto List, quindi non chiamare new ArrayList, otterrai un comportamento indesiderato.
Clocker

6
Tieni presente che non puoi aggiungere elementi all'elenco restituito da Arrays.asList. L'OP voleva avere un ArrayList (che è completamente ragionevole) ed è necessaria la costruzione di ArrayList .
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
Se devi tagliare le parentesi, puoi farlo in un unico passaggio conreplace = s1.replaceAll("^\\[|]$", "");
David Ehrmann

9

Opzione 1 :

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

Opzione 2 :

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

A mio parere, l'opzione 1 è migliore perché

  1. possiamo ridurre il numero di oggetti ArrayList creati da 2 a 1. Il asListmetodo crea e restituisce un oggetto ArrayList.
  2. le sue prestazioni sono molto migliori (ma restituisce un elenco di dimensioni fisse).

Fare riferimento alla documentazione qui


Perché non funziona List<Character> word1 = new ArrayList<Character>(Arrays.asList(A[0].toCharArray()));sto cercando di ottenere la prima stringa di un array di stringhe e di convertire quella stringa in charArray e quel charArray in List <Character>
sofs1

questo perché il metodo asList nella classe Arrays accetta solo array di oggetti, non array primitivi. Se converti char [] in Character [] array funzionerà.
Andy

public static Character [] boxToCharacter (char [] charArray) {Character [] newArray = new Character [charArray.length]; int i = 0; for (char value: charArray) {newArray [i ++] = Character.valueOf (value); } return newArray; }
Andy

8

In Java 9, l'utilizzo di List#of, che è un metodo di fabbrica statico elenco immutabile, diventa più semplice.

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

s.split("\\s*,\\s*")può essere aggiunto per ulteriore cura
Vishwajit R. Shinde

2

Se stai importando o hai un array (di tipo stringa) nel tuo codice e devi convertirlo in arraylist (stringa fuori corso), l'uso delle collezioni è migliore. come questo:

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

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

2

Ok, estenderò le risposte qui poiché molte persone che vengono qui vogliono dividere la stringa con uno spazio bianco . Ecco come si fa:

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

2

Potresti usare:

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

Dovresti chiederti se hai davvero bisogno di ArrayList in primo luogo. Molto spesso, filtrerai l'elenco in base a criteri aggiuntivi, per i quali uno Stream è perfetto. Potresti volere un set; potresti volerli filtrare per mezzo di un'altra espressione regolare, ecc. Java 8 fornisce questa estensione molto utile, tra l'altro, che funzionerà su qualsiasi CharSequence: https://docs.oracle.com/javase/8/docs/api /java/util/regex/Pattern.html#splitAsStream-java.lang.CharSequence- . Poiché non hai affatto bisogno dell'array, evita di crearlo in questo modo:

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

Se vuoi convertire una stringa in un ArrayList prova questo:

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

Ma vedo un array di stringhe nel tuo esempio, quindi se vuoi convertire un array di stringhe in ArrayList usa questo:

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

Un approccio basato sui caratteri più semplice sarebbe: ArrayList <String> myList = new ArrayList <String> (); for (Character c: s.toCharArray ()) {myList.add (c.toString ()); } Ma non credo che questo sia ciò che la persona sta cercando. La soluzione di aioobe è ciò che è richiesto. applausi
Steve

1

Più facile da capire è così:

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

1

Questo sta usando 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

Facciamo una domanda: inverti una stringa. Lo farò usando stream (). Collect (). Ma prima cambierò la stringa in un 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
*/

1
quindi ... stai usando la soluzione accettata per fare un esempio su un problema diverso? perché?
Francesco B.

0

Consiglio di utilizzare StringTokenizer, è molto efficiente

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.