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

avec Java Discussion :

Parser un String


Sujet :

avec Java

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut Parser un String
    Bonjour,

    J'ai une classe Java qui me permet de récupérer des noms de fichiers d'un dossier sous forme d'un string :



    Voici la chaîne que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test - Copie.doc test - Copie - Copie.doc test - Copie.hpr test - Copie - Copie.hpr test - Copie.ok test - Copie - Copie.ok test001
    j'ai donc la liste des noms séparés par un espace, sachant que les noms peuvent eux même avoir un espace, et non pas obligatoirement une extension.

    Comment feriez vous pour récupérer la liste des noms ?

    Merci.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pourquoi récupérer une chaîne et pas directement une liste de noms de fichier ?

    Le problème pour parser une chaîne, c'est qu'il faut des motifs reconnaissables sans ambiguïtés. Par exemple, si j'ai : ( 3, 11, 2, "4,5" ), je peux récupérer 3, 11, 2 et 4,5 sans problème, en découpant ma chaîne par des virgules en considérant que les virgules entre " ne comptent pas pour des virgules. Idem si j'ai : "truc" "machin" "bidule\"chose\"", je sais récupérer truc, machin et bidule"chose", en extrayant ce qu'il y a entre ", sauf quand le " est échappé par un \.

    Dans ta chaîne, y-a-t-il un moyen de lever toute ambiguïté (et je ne vois pas que l'espace qui peut poser un problème, le tiret et le . aussi, à priori ? Sinon, peux-tu modifier la production de la chaîne ? Si oui, pourquoi ne pas produire directement une liste ?

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Donc on est d'accord, c'est impossible
    Je vais voir si j'ai un moyen de récupérer le répertoire directement, pour obtenir la liste des fichiers.

    Merci.

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Bon finalement, je pars du principe que tous les fichiers ont une extension, je peux donc utiliser le '.' pour faire mon split.

    Voila mon code :

    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
    String test = "This is a test.txt ThisIsASecond Test.doc";
     
    int i = 0;
    while (i != test.length()) {
        String fileName = ""; String Ext = "";
     
        while (test.charAt(i) != '.') {
            fileName += test.charAt(i);    ++i;
        }
     
        ++i;
        while (i != test.length() && test.charAt(i) != ' ') {
            Ext += test.charAt(i); ++i;
        }
     
        System.out.println("FileName = "+fileName+", ext = "+Ext);
    }
    Je suis sur qu'on peut faire mieux, avec d'autres objets non ?

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Comme tu l'as dit, c'est juste pas possible à partir d'un string. Le point est un caractere autorisé dans le nom d'un fichier et une extension est optionnelle (meme si pour ce dernier point, tu sembles accepter de supposer l'extension existante).
    Bref, la bonne solution, c'est de lister comme il faut le repertoire :
    http://java.developpez.com/sources/?...sterRepertoire

    Si vraiment, ton seul point d'entrée est ce string, alors tu es obligé de supposer que les noms de fichiers ne contiennent pas de point (ce qui, encore une fois, est pourtant fréquent) et qu'ils ont une extension.
    Et pour revenir à ton code, l'utilisation d'un StringBuilder serait plus efficace (String etant immuable, tu crées des objets à chaque boucle pour rien). A ta place, en supposant que tu gardes ce code, j'utiliserais plutot un int qui pointe sur l'index de la fin du fichier et je ferais un subString quand j'ai la bonne longueur.

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    On pourrait aussi imaginer une liste d'extensions (.txt, .pdf, .doc etc ...) et autoriser le '.' dans les noms de fichiers.

Discussions similaires

  1. [DOM] Parser un String et non un fichier
    Par Zenol dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 08/04/2006, 12h20
  2. [XML] [string] parser une string XML
    Par fxp17 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 29/03/2006, 10h27
  3. Parser un String
    Par pittacos dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/10/2005, 13h26
  4. [DOM] Parser une string
    Par judi_kl dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 19/11/2004, 11h06
  5. [DOM] parser une String pour en faire un document XML
    Par Fladnag dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 29/03/2004, 11h04

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