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 :

Comment créer un chaine de n caractères identiques?


Sujet :

Langage Java

  1. #1
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut Comment créer un chaine de n caractères identiques?
    J'ai vu ça il y a longtemps mais j'ai oublié.
    Je voudrias faire qqchose comme

    String machaine = fabrique ("-",10);

    pour faire une chaine "-----------"

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    je crois que tu peux faire

    String s = "-";
    s *=10;

    EDIT : désolé je me suis trompé (c'est pas en java), mais je n'arrive pas à supprimer mon message. Tant pis j'assume

  3. #3
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il suffit de passer par un StringBuffer (ou StringBuilder en Java 5.0) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public static String fabrique(String s, int count) {
            StringBuffer buf = new StringBuffer(count*s.length());
            for (int i=0; i<count; i++) {
                buf.append(s);
            }
            return buf.toString();
        }
    a++

  4. #4
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    Oui, c une solution.
    Mais j'aurai aimé un truc plus simple du genre String toto = new String('-',10);
    (mais ce constructeur n'existe pas...)

  5. #5
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par zev
    Mais j'aurai aimé un truc plus simple
    à mon avis t'as pas le choix

    je réfléchissais à une solution avec un tableau de char mais bon c'est pas mieux (voir pire plutôt)

    Pourquoi ne veux tu pas utiliser la solution proposée ? Il y a une raison ?

  6. #6
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par zev
    Mais j'aurai aimé un truc plus simple du genre String toto = new String('-',10);
    Pourquoi vouloir une solution "plus simple" alors que celle proposée remplie ton exigence de résultat ?

  7. #7
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    Ben parce que ce n'est pas joli, ça fait trop de lignes
    Ce serait comme de splitter une date avec des substring et compagnie pour l'afficher plutot que d'utiliser un simpledateformat.

    Mais merci quand même pour la proposition.

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Citation Envoyé par in
    à mon avis t'as pas le choix

    je réfléchissais à une solution avec un tableau de char mais bon c'est pas mieux (voir pire plutôt)

    Pourquoi ne veux tu pas utiliser la solution proposée ? Il y a une raison ?

    Pourquoi ca ? Au contraire c'est plus efficace a mon avis.

    Moi j'aurais ecris ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static String fillStringWith(char aChar, int aLength)
    {
      char buf[] = new char(aLength);
      Arrays.fill(buf, aChar);
      return new String(buf);
    }
    A mon avis cote performances c'est bcp plus rapide que le coup du StringBuffer.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  9. #9
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zev
    Ben parce que ce n'est pas joli, ça fait trop de lignes
    Ce serait comme de splitter une date avec des substring et compagnie pour l'afficher plutot que d'utiliser un simpledateformat.
    Et bien si tu avais un constructeur il ferait grosso-modo la même chose...

    Sinon avec moins de ligne tu as cette solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     String machaine = "----------");


    a++

  10. #10
    Membre expérimenté Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new String(Arrays.fill(new char[10],'-'));
    [edit]heu... grilled en fait, j'avais pas vu le post de bulbo qui fait la meme chose [/edit]

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 85
    Par défaut
    Salut,

    Pas la peine de réinventer la roue y'a ce qu'il faut dans le package common
    de jakarta :-)

    http://jakarta.apache.org/commons/la...%20int,%20char)

    String s = StringUtils.leftPad("", 10, '-');

    et hop c fini !
    a+
    Xavier

    Download : http://jakarta.apache.org/site/downl...mmons-lang.cgi

  12. #12
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par adiGuba
    Sinon avec moins de ligne tu as cette solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     String machaine = "----------");


    a++
    MDR!

  13. #13
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Bonjour,

    Il suffit de passer par un StringBuffer (ou StringBuilder en Java 5.0)
    A la limite ca marcherais aussi ceci non?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public String fabrique(String s, int count){
    for(int i=0;i<count;i++){
    s=s+"-";
    }
    return s;
    }
    Enfin si j'ai bien compris

  14. #14
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par nicotine002
    Bonjour,

    Il suffit de passer par un StringBuffer (ou StringBuilder en Java 5.0)
    A la limite ca marcherais aussi ceci non?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public String fabrique(String s, int count){
    for(int i=0;i<count;i++){
    s=s+"-";
    }
    return s;
    }
    Enfin si j'ai bien compris
    Oui ça marche aussi mais : Comment concatener des chaînes de caractères ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  15. #15
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Oui ça marche aussi mais : Comment concatener des chaînes de caractères ?
    Oui d'où le "A la limite"
    Je savais que ca demandais plus de travail à la jvm mais je pensais pas que ca ré-instanciait l'objet à chaque itération.Donc...Merci pour l'info

  16. #16
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicotine002
    Je savais que ca demandais plus de travail à la jvm mais je pensais pas que ca ré-instanciait l'objet à chaque itération.
    En fait l'opérateur + utilise implicitement un StringBuffer/StringBuilder (selon la version). Ce qui fait que ton code est l'équivalent de celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public String fabrique(String s, int count){
    for(int i=0;i<count;i++){
        s = new StringBuffer(s).append("-").toString(); // s=s+"-";
    }
    return s;
    }
    Cela permet de mieux voir le problème : la création de deux objets (un StringBuffer et un String via toString()) à chaque itération...

    Bien sûr pour 10 itérations cela ne se ressent pas... mais si le nombre d'itération est très grand cela risque de plomber les perfs car le GC va allourer/déssallouer la mémoire sans arrêt...

    a++

  17. #17
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Ok, merci pour l'info, j'ai plus qu'à regarder dans tout mes soft si je ne fais pas trop ce genre de chose losque l'itération se fait plusieurs millier de fois...

    En passant j'ai une autre question sur les JTable, vu que je travail sur des dizaine de miller de données à inserer dans des JTable, je me demandais quel était le meilleur moyen de les insérer?Est-il préférable dans ce cas là de le creer avec ce constructeur(où même un model):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JTable(Object[][])
    Où bien alors de creer la JTable et d'inserer les données ensuite via setValueAt?
    Voilà c'était juste un question en passant, plutot que de creer un post
    Merci d'avance.

  18. #18
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    Merci pour toutes ces solutions
    J'ai retenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static String fillStringWith(char aChar, int aLength)
    {
      char buf[] = new char(aLength);
      Arrays.fill(buf, aChar);
      return new String(buf);
    }
    (merci bulbo)

    ou en installant le package common de jakarta (jar ici) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int aLength = 10;
    String s = StringUtils.leftPad("", aLength, '-');
    (merci xfacq)

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

Discussions similaires

  1. Extraire une chaine entre 2 caractères identiques
    Par nicomax34 dans le forum Langage
    Réponses: 3
    Dernier message: 28/01/2014, 10h39
  2. Comment créer un document XML à partir d'une chaine de caractères
    Par imad_eddine dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 19/11/2007, 18h09
  3. Réponses: 4
    Dernier message: 03/07/2007, 11h21
  4. Réponses: 6
    Dernier message: 15/05/2006, 22h39
  5. Réponses: 2
    Dernier message: 13/10/2005, 17h46

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