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

Java Discussion :

split d'une chaîne dont des éléments sont vides


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Par défaut split d'une chaîne dont des éléments sont vides
    Bonjour,

    Je cherche à charger les données d'un fichier csv dans un tableau ou une map.
    Que j'utilise la méthode split() ou un StringTokenizer, j'ai le même problème : si un champ de mon csv est nul, java passe dessus, l'ignore. Alors que j'aimerais bien avoir connaissance de cet élément nul.

    Le code :
    String ligneCSV = "a,b,,d";
    String[] result = ligneCSV.split(",");

    me donne un tableau dont l'élément 0 est a, l'élément 1 est b, l'élément 2 est d. Or j'aimerais que l'élément 2 soit null, et que d soit en position 3.

    Je suppose que ce genre de problématique est connu mais je n'ai pas trouvé de discussion sur ce sujet.

    Merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    Suffit de passer par String.split :

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Par défaut
    En effet ... je ne sais pas comment je me suis débrouillée lors de mon test avec split mais j'ai du aller trop vite.
    Désolée.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par lilas14 Voir le message
    Le code :
    String ligneCSV = "a,b,,d";
    String[] result = ligneCSV.split(",");
    me donne un tableau dont l'élément 0 est a, l'élément 1 est b, l'élément 2 est d. Or j'aimerais que l'élément 2 soit null, et que d soit en position 3.
    Vraiment ? Parce que chez moi j'obtiens bien un tableau à 4 éléments : "a", "b", "" et "d".

    En revanche, si j'applique split sur "a,b,,," j'obtiens un tableau à 2 éléments seulement, ce qui est normal car comme l'indique la Javadoc : "trailing empty strings will be discarded". Pour obtenir les 5 éléments avec les chaînes vides il faut appliquer split(",", -1).


    EDIT : argh mais je suis super lente, moi

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Par défaut
    Ah non, milles excuses, je vais décidément trop vite ...

    Donc, si j'utilise le split, j'obtiens bien un tableau avec des éléments nul. En revanche, la taille du tableau est nécessairement égal à l'indice max du dernier élément non nul +1. Cela me pose problème pour la suite.

    Et si j'utilise un StringTokenizer pour alimenter une map, le problème s'inverse, il zappe les éléments nuls.

    Pour l'instant, la seule solution que je vois serait d'appeler la fonction split, puis de reparcourir tout mon tableau pour mettre les éléments à nul. Vous connaîtriez une façon plus élégante de m'éviter un IndexArrayOputOfBounds lorsque j'essaie d'accéder à une valeur ou de la modifier ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Ça ne correspondrait pas au comportement que j'ai décrit dans mon post ci-dessus ?

    Par contre, précision : il ne s'agit pas d'éléments null mais de chaînes vides.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Par défaut
    Je ne sais pas les autres mais moi je n'ai rien compris à ce que tu vient de dire lilas14.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Par défaut
    Pour être plus claire :

    String ligneCSV = "a,b,c,d,,e,,,,f,,,,,,,,,,,";
    String[] result = ligneCSV.split(",", 100);

    System.out.println("taille du tableau : "+result .length);
    for(int i=0; i < result .length; i++) {
    System.out.println("élément "+i+" : "+result [i]);
    }
    me donne :
    taille du tableau : 21
    élément 0 : a
    élément 1 : b
    élément 2 : c
    élément 3 : d
    élément 4 :
    élément 5 : e
    élément 6 :
    élément 7 :
    élément 8 :
    élément 9 : f
    élément 10 :
    élément 11 :
    élément 12 :
    élément 13 :
    élément 14 :
    élément 15 :
    élément 16 :
    élément 17 :
    élément 18 :
    élément 19 :
    élément 20 :
    Donc finalement le résultat est bon ...
    le problème c'est que par la suite, je fais un
    result[36]="toto";
    Qui là, bien évidemment m'envoie une exception ...

    Donc depuis le début c'est mon analyse qui était mauvaise du fait que je me suis embrouillée entre le split et le StringTokenizer ...

    Merci pour votre patience ...

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par lilas14 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[] result = ligneCSV.split(",", 100);
    System.out.println("taille du tableau : "+result .length);
    me donne :
    Ah, je vois... eh oui, tu peux limiter le nombre de cases du tableau renvoyé mais pas imposer une longueur supérieure à celle des éléments effectivement présents dans la chaîne
    Si tu veux stocker le résultat du split dans un tableau de taille fixée, il va sans doute falloir recopier les résultats, en tous cas moi je ne vois pas d'autre solution.

    Par contre, je n'ai pas bien compris tu avais toujours un problème, ou non ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Suppression d'une ligne dont les cellules sont vides à partir d'une certaine colonne
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2015, 13h54
  2. Centrer une page dont les éléments sont positionnés en absolu
    Par Rodrigue dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 12/11/2011, 22h54
  3. Réponses: 12
    Dernier message: 15/07/2009, 17h28
  4. Réponses: 5
    Dernier message: 08/04/2009, 12h15

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