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 :

String avec retour à la ligne tous les '100' caractères


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Par défaut String avec retour à la ligne tous les '100' caractères
    Bonjour,


    Je suis en train de développer une petite fonction qui, dans une variable String, fait un saut de ligne tous le 100 caractères en essayant de ne pas couper les mots. C'est à dire que s'il faut faire un retour à la ligne au caractère 99 pour ne pas se retrouver avec un début de mot en fin de ligne et sa suite à la ligne d'après, il faut gérer cela.


    Pour l'instant j'ai réussi à faire une fonction qui marche mais j'aimerais avoir votre avis, pour savoir si on peut l'améliorer:

    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
    18
    19
    20
    public static String formatString(String lines){
        String maChaine=lines;
        int NB_MAX=100, i=0, index =-1;
     
        while(i+NB_MAX < lines.length()-1){
            index = maChaine.substring(i, i+NB_MAX).lastIndexOf(' ');
     
            if(index != -1)
                maChaine = maChaine.substring(0, (index+i)+1) + '\n' + maChaine.substring((index+i)+1);
     
            else
                maChaine = maChaine.substring(0, i+1) + '\n' + maChaine.substring(i+1);
     
     
            i+= index+1;
        }
     
     
        return maChaine;
      }

    En vous remerciant par avance,

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Il serait sans doute un peu plus simple et un peu plus propre de construire la chaîne dans un StringBuilder au lieu de le faire à coups de +

    Pour déterminer où couper les lignes, tu pourrais utiliser lastIndexOf() sur tout le restant de la string, mais en commençant à l'extrême limite autorisée, avec lastIndexOf(int ch, int fromIndex).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Par défaut
    Bonjour et merci de votre réponse.

    Si je comprends bien, je dois créer une variable StringBuilder et construire ma chaîne grâce à la méthode append()?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ce serait plus efficace et plus facile à lire, oui.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Par défaut
    Voici mon nouveau 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public static String formatString(String lines){
     
        int NB_MAX=100, i=0, index;
        StringBuilder maChaine = new StringBuilder();
     
        while(i+NB_MAX < lines.length()-1){
            //On cherche le dernier index du caractère 'espace'
            index = lines.substring(i, i+NB_MAX).lastIndexOf(' ');
            //Si le caractère a été trouvé
            if(index !=-1){
                //On concaténe la sous-chaine au StringBuilder
                maChaine.append(lines.substring(i, i+index));
                //On met à jour la taille de sous-chaine traitée
                i += index+1;
            }
            //Sinon
            else{
                //On concaténe une sous-chaine contenant 'NB_MAX' caractères au StringBuilder
                maChaine.append(lines.substring(i, i+NB_MAX));
                //On met à jour la taille de sous-chaine traitée 
                i += NB_MAX;
            }
            //On concaténe le caractère 'retour chariot' au StringBuilder
            maChaine.append('\n');
        }
     
        //On renvoie la chaine obtenue
        return maChaine.toString();
      }
    Merci de me donner vos impressions.


    EDIT: Il faut aussi rajouter un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maChaine.append(lines.substring(i, lines.length()));
    après le while pour qu'il concatène la fin de la chaine.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Pas mal. Voici ma tentative :

    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
    // en principe, même taille que la chaîne originale. Autant pré-réserver.
    StringBuilder maChaine = new StringBuilder(lines.length());
    int index = 0;
     
    while(index < lines.length()) {
      int spaceIndex = lines.lastIndexOf(' ', index + NB_MAX);
     
      if(spaceIndex < index) { // inclut < 0, donc espace non trouvé : on a fini
        maChaine.append(lines.substring(index));
        index = lines.length();
      } else {
        maChaine.append(lines.substring(index, spaceIndex));
        maChaine.append('\n');
        index = spaceIndex + 1;
      }
    }
    Ça évite de faire des substring() à répétition.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [KSH] ajouter des saut de lignes tous les 200 caractères dans un fichier
    Par twixi dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 09/10/2012, 15h58
  2. saut de ligne tous les n caractère
    Par bigs3232 dans le forum Langage
    Réponses: 2
    Dernier message: 07/01/2012, 13h41
  3. Concatenation string avec retour a la ligne
    Par X-Nem dans le forum SAP
    Réponses: 1
    Dernier message: 25/08/2008, 16h09
  4. Réponses: 2
    Dernier message: 16/08/2006, 14h47
  5. [CSS] espace dans les li avec retour à la ligne
    Par grinder59 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 04/07/2006, 11h00

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