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 :

Problème StringTokenizer !


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut Problème StringTokenizer !
    Voila j'utilise le StringTokenizer depuis un momment mais la je rencontre un problème que j'arrive pas a résoudre.

    Je recupere donc un chemin dans une string qui est du type c:\x\y\monfichier.txt

    Et je voudrais retirer de la String c:\x

    j'utilise donc cette portion de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringTokenizer("c:\\x\\y\\monfichier.txt","c:\\x"); s = st.nextToken(); (2fois)
    Ce qui devrait me donner (enfin j'esperais) \y\monfichier.txt
    Hors je n'optiens que y

    Pourquoi?
    Et comment faire pour obtenir ce que je voulais?

    Merci.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Salut,
    En fait il me semble que dans le StringTokenizer, tu ne peux pas définir un mot pour délimiteur. Sur java.sun.com ils disent d'ailleurs dans la doc:
    The set of delimiters (the characters that separate tokens) may be specified either at creation time or on a per-token basis.
    Donc qu'il considère que les caractères sont à traiter individuellement. C'est en tout cas ce que j'ai compris.

  3. #3
    Membre éclairé Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Par défaut
    pourquoi tu n´utilise pas les operations sur les chaines pour enlever ce que tu ne veux pas ?
    Sinon pour le tokenizer, tu ca devrait marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringTokenizer(taChaine,tonDelimiteur).nextToken().nextToken();
    Par contre je ne sais pas ce qu´il se passe s´il y a une chaine vide avant le delimiteur (j´ai rien pour tester la ).

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 57
    Par défaut
    StringTokenizer("c:\\x\\y\\monfichier.txt","c:\\x");
    ce code te coupera ta chaine a tous les caractèrs 'c' '\\' et 'x'
    ce que tu peux faire:

    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "c:\\x\\y\\monfichier.txt".substring(4);
    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    StringTokenizer st=StringTokenizer("c:\\x\\y\\monfichier.txt","\\");
    st.nextToken();// supprime c:
    st.nextToken();//supprime x
    Stringresult="";
    while (st.haseMoreToken())
        Stringresult=Stringresult+'\\'+st.nextToken();

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    oki

    Mais ce que je trouve bizzard c'est que si je fais c: comme delimiteur il me renvoie bien tout le reste de la chaine \x\y\monfichier.txt

    C'est surtout a cause de cette bizzarerie que je pose ma question.

    Pourquoi avec c: j'ai tout le reste et avec c:\\ j'ai plus que x

    C'est etrange.

    Moi aussi j'ai parcouru la doc et je vois pas trop pourquoi.

    Enfin bon c'est bizzard tout de meme

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 57
    Par défaut
    je viens de te le dire !!!

    il sépare et enlève tous les caractère du token

    il doit d'ailleurs te rester "\x\y\monfi" dans un premier token et "hier.txt" dans un autre

    avec "c:\\" il coupe et enlève tous les 'c' les ':' et les '\\'

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 137
    Par défaut Class File ?
    De mon point de vue rien de mieux que la classe File pour jouer avec des noms de fichiers ...

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Citation Envoyé par XSeb74
    je viens de te le dire !!!

    il sépare et enlève tous les caractère du token

    il doit d'ailleurs te rester "\x\y\monfi" dans un premier token et "hier.txt" dans un autre

    avec "c:\\" il coupe et enlève tous les 'c' les ':' et les '\\'

    Et moi je viens de te dire toute la chaine en un seul morceau et non coupé en deux comme tu le suggere
    j'ai en resultat \x\y\monfichier.txt meme quand monfichier.txt contient un c ou un : et non en deux morceaux comme tu me le dis

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 137
    Par défaut
    Et si tu précisais exactement ce que tu veux faire ?
    hors du contexte j'ai un peu de mal a comprendre

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 57
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    StringTokenizer st = new StringTokenizer("c:\\x\\y\\monfichier.txt","c:"); 
            String s =st.nextToken();
            System.out.println(s);
            s =st.nextToken();
            System.out.println(s);
    affiche
    me dit pas non je viens de le lancer !

  11. #11
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,


    Dans un des messages, il est précisé que delimiter est un vu comme un ensemble de caractères utilisés comme délimiteur.

    Donc dans ton exemple 'c' et ':' sont deux délimiteurs.

    Appliqué à la chaîne "c:\x\y\monfichier.txt", la méthode nextToken te renvoie "\x\y\monfi" au premier appel et "hier.txt" au deuxième.

    cqfd

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 137
    Par défaut problème mal posé ?
    Pourquoi utiliser stringTokenizer il ne s'applique pas ?

    si tu connais c:\x et c:\x\y\monfichier.txt un substring est bien plus efficace

    ou alors (encore une fois) utilises la classe file :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    File fichier= new File("c:\\x\\y\\monfichier.txt");
    File root = new File("c:\\x");     
    if(fichier.getAbsolutePath().startsWith(root.getAbsolutePath()))  // devrait toujours être OK
    {             
      System.out.println(fichier.getAbsolutePath().substring(root.getAbsolutePath().length());
    }

  13. #13
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut
    C'est vrai que la classe String serait peut-être plus appropriée pour faire ce genre d'opérations !!

Discussions similaires

  1. Problème avec StringTokenizer
    Par pontus21 dans le forum Langage
    Réponses: 5
    Dernier message: 20/07/2009, 11h06
  2. Problème avec StringTokenizer
    Par DjeXtoR dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 27/11/2008, 09h20
  3. Petit problème avec StringTokenizer
    Par mygwel dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2006, 18h22
  4. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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