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

Langage Java Discussion :

StringTokenizer et plusieurs delim


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 314
    Par défaut StringTokenizer et plusieurs delim
    Bonjour,

    Je voudrais savoir s'il est possible de mettre en place un StringTokenizer avec plusieurs délimiteurs ?

    Merci

  2. #2
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Ca dépend comment tu veux l'utiliser et si tu travailles sur des schémas fixes.

    En utilisant la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nextToken(String delim)
    tu appelle le prochain token avec le nouveau délimiteur spécifié, donc ca peut etre ta solution.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 314
    Par défaut
    Je ne travaille pas avec des schémas fixes. Il existe plusieurs délimiteurs dans ma chaîne de caractères. C'est pour cela que j'aurais voulu si possible utiliser StringTokenizer avec en paramètres une liste de delimiteurs qui contiendrait tous mes délimiteurs.

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut
    Pourquoi ne pas utiliser les RegEx (java.util.regex.Pattern) ?
    Tu dois pouvoir créer une expression régulière qui correspond à tes délimiteurs et ensuite il y a la méthode Pattern.split() qui te récupère directement les textes entre les délimiteurs.

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    StringTokenizer est deprecated ... Lui préférer String.split(regex)

  6. #6
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Citation Envoyé par chtig
    StringTokenizer est deprecated ... Lui préférer String.split(regex)
    En 1.6 c'est deprecated (ca me semble important à préciser vu que y'a encore des gens qui sont en 1.42 ^^)

  7. #7
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Citation Envoyé par eulbobo
    En 1.6 c'est deprecated (ca me semble important à préciser vu que y'a encore des gens qui sont en 1.42 ^^)
    Oui, exact, c'est deprecated en 1.6. Mais bon, tant qu'à écrire un code maintenant, autant éviter les choses qui sont deprecated même si c'est dans une version ultérieure. split existe quand même depuis 1.4 si je ne m'abuse ...

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    Même dans la 1.4.2 on peut lire dans la javadoc de StringTokenizer :
    StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
    D'ailleurs je vois pas de deprecated sur cette classe dans Java 6

  9. #9
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Moi non plus, pas de déprecated.

    Pour répondre à ta question sur plusieurs délimiteurs, ce que tu peux faire c'est tout d'abord définir une priorité sur ces opérateurs (par exemple +* => on sépare d'abord sur les +, puis sur les *).

    Ensuite tu crée un StringTokenizer tk1 avec +.
    Et tu analyse chaque tokens de tk1 avec un StringTokenizer tk2 avec les *.

    Et tu peux recommencer autant de fois que tu veux ;-)

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Y a ca... et sinon si jamais ce n'est pas trop la reponse a la question posee (qui n'est guere precise dans sa formulation initiale), il y a tout simplement le fait que de base tu peux passer plusieurs delimiteurs dans le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringTokenizer tokenizer = new StringTokenizer(s, " \t,;:\n\r");
    Chacun des caracteres passes dans le second argument sera traite comme une separateur a part entiere. La chaine sera donc splitee suivant ' ' OU '\t' OU ',' OU ';' OU ':' OU '\n' OU '\r' soit l'equivalent d'un split sur "(' '|'\t'|','|';'|':'|'\n'|'\r')" si je ne m'abuse.

    Cette classe a beau avoir ete remplacee par les regexp (et non pas mise en deprecated) elle n'en reste pas moins pratique pour des operation simples.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Citation Envoyé par bouye
    Cette classe a beau avoir ete remplacee par les regexp (et non pas mise en deprecated) elle n'en reste pas moins pratique pour des operation simples.
    Effectivement, ce n'est pas deprecated.
    En même temps, deprecated pour moi veut exactement dire
    StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code
    ...

  12. #12
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Non, deprecated signifie que l'api est obsolète, et cela peut advenir pour plusieurs raisons :

    - une api de substitution ou plus stable a été dévelopée (par exemple Date => Calendar, Vector => ArrayList<E> méthodes renommées pour standardisation)
    - cette api n'était pas séurisée (Thread.stop() )
    - ...

    Par ailleurs, une api est deprecated est annotée par le tag @deprecated, on le voit explicitement dans la doc, et à l'utilisation le compilateur lache un warning n'empêchant bien évidement pas le programme de s'exécuter.

  13. #13
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    En même temps, sun ne met pas beaucoup de classes deprecated alors qu'elles le mériteraient (Vector est un exemple flagrant).
    Sans doute pour éviter à ceux qui n'utilisent que ça d'avoir plein de warnings, et le code barré dans l'éditeur...
    Le deprecated est surtout utilisé sur les méthodes...

  14. #14
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    La folie de la POO lol, un peu comme remplacer une méthode move ou translate par setLocation et déclarer la première deprectated, ça ne sert absolument à rin si ce n'est à répondre à un standart de programmation et d'architecture de code...

  15. #15
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Ben
    une api de substitution ou plus stable a été dévelopée
    c'est le cas la avec split ...
    Après, oui le compilo ne met pas de warning parce que ça n'est pas flaggué deprecated par Sun, mais dans l'idée en ce qui me concerne ça ne change rien ...

  16. #16
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par bouye
    Cette classe a beau avoir ete remplacee par les regexp (et non pas mise en deprecated) elle n'en reste pas moins pratique pour des operation simples.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  17. #17
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par bouye
    Cette classe a beau avoir ete remplacee par les regexp (et non pas mise en deprecated) elle n'en reste pas moins pratique pour des operation simples.
    Je trouve le split() beaucoup plus simple que le StringTokenizer...

  18. #18
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Les méthodes de la classe StringTokenizer offrent quand même plus de possibilités que la méthode split.

  19. #19
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Razgriz
    Les méthodes de la classe StringTokenizer offrent quand même plus de possibilités que la méthode split.
    Oui enfin bon, nextDelim, countTokens ou hasMoreTokens, c'est limité...
    à la rigueur il y a le nextToken(delim), mais dans ce cas il y a la classe Scanner qui est beaucoup plus riche...

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 314
    Par défaut
    Cette discussion prend des airs de débat et ce n'est pas déplaisant. (C'est grâce à mon post que l'on en débat ) Ceci dit, je voudrais savoir si l'un de vous sait s'il est possible de surcharger la méthode StringTokeniser afin qu'elle prenne pour paramètre un tableau de String.
    Cela m'éviterai d'avoir à passer par Regex.

    En vous remerçiant,

    Bonne journée.

Discussions similaires

  1. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 18h35
  2. comment gerer plusieurs connexions client/serveur
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/08/2002, 17h58
  3. Plusieurs scenes
    Par logramme dans le forum DirectX
    Réponses: 2
    Dernier message: 11/08/2002, 15h02
  4. Génerer automatiquement plusieurs fichier .doc
    Par brunovitch dans le forum QuickReport
    Réponses: 3
    Dernier message: 09/07/2002, 09h19
  5. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 16h57

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