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 :

Formater une chaine


Sujet :

avec Java

  1. #1
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2006
    Messages : 121
    Points : 127
    Points
    127
    Par défaut Formater une chaine
    Bonjour,

    J'ai un petit souci avec les caractères vides dans une liste de chaine.

    Ma liste est remplie comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Nain grincheux - France
    NouveauNain simplet - Espagne
    Mais j'aimerai qu'elle soit formatée comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Nain grincheux       -   France
    NouveauNain simplet  -   Espagne
    J'ai regardé du coté de String.format mais je ne vois pas comment faire.
    Le trim() enlève les caractères vides. Je voudrais au contraire les fixer.

    Est-ce possible? Merci d'avance.

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Ma solution n'est peut être pas la bonne mais ca t'aidera.
    Splite ta chaine avec comme séparateur le "-" et ensuite utilise un stringBuffer qui contiendra:
    -La premiere chaine (Nain...)
    -le nombre d'espace que tu souhaites
    -le "-"
    -le nombre d'espaces encore que tu vx
    -ta derniere chance.
    Tout simplement et ca marchera.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    Il y a une classe spéciale pour ce genre de formattage: Formatter
    Javadoc : http://java.sun.com/j2se/1.5.0/docs/...Formatter.html

    Cà s'utilise avec un masque d'édition comme "printf" et "sprintf" en language C

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		String nom = "Nain grincheux";
    		String pays = "France";
     
    		System.out.format("%-25.25s - %s%n", nom, pays);
    C'est la syntaxe du printf(), détaillé sur la page de doc de la classe java.util.Formatter.

    Explication rapide :
    Chaque bloc %* correspond à une notion de formatage. Il s'appliquera par défaut au paramètre correspondant (le premier % correspond au premier paramètre suivant, etc...) :
    • Le nom sera formaté par %-25.25s, ce qui signifie :
      • Le s final indique que l'on formate une chaine de caractère (string).
      • Le - initial indique que l'on souhaite un alignement à gauche (sinon le texte est aligné à droite).
      • Le 25 indique la taille minimum du texte, donc ici le texte prendra 25 caractères au minimum et sera remplit par des espaces s'il est plus petit.
      • Le .25 indique la taille maximum. Ici si le nom est plus long il sera tronqué. Il suffit de supprimé cela pour que la zone de texte soit agrandit.
    • Le second %s permettra d'afficher la ville tout simplement, sans formatage particulier.
    • Enfin le %n n'est pas associé à un paramètre et se contentera de générer un retour à la ligne...


    Le formatage à-la-printf() est super puissant une fois qu'on le maitrise un peu

    a++

  5. #5
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2006
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    Merci pour vos réponses.

    Comme je disais, j'avais vu l'histoire du formatage, mais la javadoc ne me parle pas du tout malheureusement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       // Explicit argument indices may be used to re-order output.
       formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
       // -> " d  c  b  a"


    J'avais déjà essayé de l'utiliser pour autre chose mais je n'ai pas réussit à appliquer ce bidule : "%4$2s".
    Ca me renvoyais toujours une erreur comme quoi c'était inconnu

    Est-ce que qqun saurait à quoi ca ressemblerait pour un de mes nains ?
    Merci d'avance.

    EDIT: Merci bcp adiGuba

  6. #6
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2006
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    Merci beaucoup à tous^^

    Ca marche nickel.
    Voici à quoi ca ressemble si ca peut aider d'autres personnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            StringBuilder sb = new StringBuilder() ;
            Formatter fmter = new Formatter(sb,Locale.FRANCE) ;
            fmter.format("%-40.50s - %-40s - %s", nomStr,entStr,typeStr) ;
     
            return fmter.toString() ;

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Pour info tu pourrais remplacer ce code par ceci (qui appelle Formatter) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String str = String.format("%-40.50s - %-40s - %s", nomStr,entStr,typeStr);

    Et comme tu ne traites que des chaines de caractère, tu n'as pas besoin d'utiliser la locale (même si ca ne fait pas de mal de la spécifier). La locale sert pour le formattage des dates et des nombres...

    a++

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

Discussions similaires

  1. Formater une chaine
    Par dark_vidor dans le forum Langage
    Réponses: 4
    Dernier message: 17/03/2006, 19h11
  2. Réponses: 3
    Dernier message: 01/02/2006, 18h26
  3. Formater une chaine issue d'un XML
    Par L'ours dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/12/2005, 09h34
  4. [vb.net]Formater une chaine en date
    Par Dnx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/10/2005, 12h40
  5. [langage] cherche script pour formater une chaine
    Par MASSAKA dans le forum Langage
    Réponses: 7
    Dernier message: 12/11/2003, 12h18

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