IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Convertir "[abc,def,[ghi,jkl]]" en Vector ?


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut Convertir "[abc,def,[ghi,jkl]]" en Vector ?
    Bonjour à tous,

    J'aimerai savoir s'il y a un moyen simple et rapide de transformer une string en vector.

    J'ai:
    String test = "[ab,cdef,[ghijk],[l,mno,p],rstuv,wxyz]";

    Et j'aimerai avoir:
    Un vector contenant en position :
    0 : ab
    1 : cdef
    2: un sous-vecteur contenant en position 0: ghijk
    3: un sous-vecteur contenant en position 0:l, 1:mno, 3:p
    4: rstuv
    5: wxyz


    Un idée?

    Merci par avance pour vos coup de pouces

  2. #2
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    Ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class Test {
    	public static void main(String args[]) throws Exception {
    		String test = "[ab,cdef,[ghijk],[l,[aa,oo],mno,p],rstuv,wxyz]";
    		List<Object> list = new ArrayList<Object>();
    		test = test.substring(1);
    		test = test.substring(0,test.length()-1);
    		test(list,test);
    		System.out.println(list);
    	}
     
    	private static void test(List<Object> list,String s) {
    		if(s.startsWith("[")) {
    			ArrayList<Object> sl = new ArrayList<Object>();
    			list.add(sl);
    			s = s.substring(1);
    			s = s.substring(0,s.length()-1);
    			test(sl,s);
    		} else {
    			String[] cut = s.split(",");
    			list.addAll(Arrays.asList(cut));
    		}
    	}
    }
    Ca a l'air de fonctionner

    Sinon évite Vector si tu n'as pas besoin de synchro, cf http://java.developpez.com/faq/java/...IONS_info_list

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut
    Impeccable!!
    On peut pas faire mieux je pense!

    Merci beaucoup.

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut
    En fait non ça ne marche pas

    Ca fait juste une liste contenant :
    ab
    cdef
    [ghijk]
    [l
    [aa
    oo]
    mno
    p]
    rstuv
    wxyz]

    Je m'en suis pas rendu compte toute suite, car quand on fait un print de la liste ca rend bien : [ab, cdef, [ghijk], [l, [aa, oo], mno, p], rstuv, wxyz].
    Mais quand on la parcourt c'est pas du tout ça

  5. #5
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(s.startsWith("[")) {
    C'est un bon début de code ...
    Mais il ne recherche pas le caractère de fin ("]")
    donc quand il détecte un "[" il faut chercher le "]" suivant , vérifier qu'entre "[" et "]" il n'y a pas d'autre "[" etc

  6. #6
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Bonjour,

    l'idée est de parcourir la chaine afin de construire récursivement la liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
        public static List getList(Iterator sequence) {
            List liste = new ArrayList();
            String element = "";
            while(sequence.hasNext()) {
                char charactere = (Character)sequence.next();
                switch (charactere) {
                case ',': //fin de l'element courant => ajout à la liste courante
                    if(!"".equals(element)) {
                        //TODO que faire si on veut ajouter une chaine vide ",,"
                        liste.add(element);
                    }
                    element = "";
                    break;
                case '[': //debut d'une sous liste
                    liste.add(getList(sequence));
                    break;
                case ']': //fin de la liste courante
                    liste.add(element);
                    return liste; //renvoie de la liste courante
                default: //ajout du caractere à l'element courant
                    element+=charactere;
                    break;
                }
            }
            return liste; //renvoie de la liste principale
        }
    et poour l'appel de cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public static void main(String[] args) {
            // TODO Raccord de méthode auto-généré
            String test = "[ab,cdef,[ghijk],[l,mno,p],rstuv,wxyz]";
            test = test.substring(test.indexOf("[")+1,test.lastIndexOf("]"));
            List tempoChaine = new ArrayList();
            //création d'une liste afin d'obtenir un iterateur
            for (char c : test.toCharArray()) {
                tempoChaine.add(c);
            }
            //appel de la méthode recursive
            List liste = getList(tempoChaine.iterator());
            System.out.println(liste);
        }

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo