web-dev-qa-db-fra.com

convertir une chaîne en liste de caractères <Caractère> en java

Comment convertir une chaîne sans séparateur en un ArrayList<Character>.

Ma chaîne est comme ça:

String str = "abcd..."

Je sais qu’une façon de procéder consiste à convertir la chaîne en char[] d’abord, puis à convertir le char [] en ArrayList <Character>.

Y a-t-il une meilleure façon de faire cela? comme convertir directement? Compte tenu du temps et des performances, je code avec une base de données volumineuse.

15
Pan Long

Vous devez l'ajouter comme ceci.

String str = "abcd...";
ArrayList<Character> chars = new ArrayList<Character>();
for (char c : str.toCharArray()) {
  chars.add(c);
}
13
squiguy

utilisez l'expression lambda pour le faire.

String big_data = "big-data";
ArrayList<Character> chars
        = new ArrayList<>(
                 big_data.chars()
                .mapToObj(e -> (char) e)
                .collect(
                        Collectors.toList()
                )
        );    
5
Rahmat Waisi

Si vous n'avez pas besoin de modifier la liste après l'avoir créée, le mieux serait probablement d'envelopper la chaîne dans la classe implémentant l'interface List<Character> comme ceci:

import Java.util.AbstractList;
import Java.util.List;

public class StringCharacterList extends AbstractList <Character>
{
    private final String string;

    public StringCharacterList (String string)
    {
        this.string = string;
    }

    @Override
    public Character get (int index)
    {
        return Character.valueOf (string.charAt (index));
    }

    @Override
    public int size ()
    {
        return string.length ();
    }
}

Et puis utilisez cette classe comme ceci:

List <Character> l = new StringCharacterList ("Hello, World!");
System.out.println (l);
2
Mikhail Vladimirov

Désolé pour le Retrobump, mais c'est maintenant très facile!

Vous pouvez le faire facilement dans Java 8 en utilisant Streams! Essaye ça:

String string = "testingString";
List<Character> list = string.chars().mapToObj((i) -> Character.valueOf((char)i)).collect(Collectors.toList());
System.out.println(list);

Vous devez utiliser mapToObj car chars() renvoie IntStream.

2
Leo Izen
public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "abcd...";
        ArrayList<Character> a=new ArrayList<Character>();
        for(int i=0;i<str.length();i++)
        {
            a.add(str.charAt(i));

        }
        System.out.println(a);
    }
1
Biswajit

vous pouvez le faire comme ceci:

import Java.util.ArrayList;

public class YourClass{

    public static void main(String [] args){

        ArrayList<Character> char = new ArrayList<Character>();
        String str = "abcd...";

        for (int x = 0; x < str.length(); x ++){
            char.add(str.charAt(x));
        }
    }
}
0
Ely

Il existe une ligne goyave solution:

Lists.charactersOf("hello");

Vous pouvez transmettre ImmutableList résultant au constructeur de ArrayList mais puis-je vous demander pourquoi vous avez exactement besoin de ArrayList?

0
cardamo