web-dev-qa-db-fra.com

Comment convertir une chaîne en une liste de tableaux?

Dans ma chaîne, je peux avoir un nombre arbitraire de mots séparés par des virgules. Je voulais que chaque mot ajouté dans une ArrayList. Par exemple.:

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

Essayez quelque chose comme

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

Démo:

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]

Cet article a été réécrit sous forme d'article ici .

209
aioobe
 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());
27
Sameek Mishra

En Java 9, l’utilisation de List#of, qui est une méthode de liste statique de listes immuables, devenait plus simple.

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

Option 1

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

Option 2:

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

À mon avis, Option1 est préférable car 

  1. nous pouvons réduire le nombre d'objets ArrayList en cours de création de 2 à 1. La méthode asList crée et retourne un objet ArrayList.
  2. ses performances sont bien meilleures (mais il retourne une liste de taille fixe).

Veuillez vous référer à la documentation ici

5
Andy

Si vous importez ou si vous avez un tableau (de type chaîne) dans votre code et que vous devez le convertir en liste (chaîne hors cours), l'utilisation de collections est préférable. comme ça:

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

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

Vous pouvez utiliser: 

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

Vous devriez vous demander si vous avez vraiment besoin de ArrayList en premier lieu. Très souvent, vous allez filtrer la liste en fonction de critères supplémentaires, pour lesquels un flux est parfait. Vous voulez peut-être un jeu; vous voudrez peut-être les filtrer au moyen d'une autre expression régulière, etc. Java 8 fournit d'ailleurs cette extension très utile, qui fonctionnera sur toutes les variables CharSequence: https://docs.Oracle.com/javase/8/ docs/api/Java/util/regex/Pattern.html # splitAsStream-Java.lang.CharSequence - . Puisque vous n'avez pas du tout besoin du tableau, évitez de le créer ainsi: 

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

Si vous voulez convertir un string en un ArrayList, essayez ceci:

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

Mais je vois un tableau de chaînes dans votre exemple, donc si vous voulez convertir un tableau string en ArrayList, utilisez ceci:

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

Ok, je vais développer les réponses ici car beaucoup de ceux qui viennent ici veulent diviser la chaîne par un espace blanc . Voici comment cela se fait:

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

Prenons une question: Inverser une chaîne. Je vais le faire en utilisant stream (). Collect (). Mais je vais d'abord changer la chaîne en une 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
*/
0
Soudipta Dutta

Si vous utilisez de la goyave (et vous devriez le faire, voir article Java effectif n ° 15 ):

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

Je recommande d'utiliser le StringTokenizer, c'est très efficace 

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

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

Ceci utilise Gson à 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

Plus facile à comprendre, c'est comme ça:

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