Word wrap

ghnadou - Modifié par KX le 16/10/2016 à 21:02
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 17 oct. 2016 à 08:43
Bonjour,
j'essayé de faire un programme pour résoudre l'exercice suivant:
L’objectif de ce Kata est de programmer un wrapper de texte, c’est-à-dire un outil qui formate
un texte pour qu’il passe à la ligne après un certain nombre de mots, à la façon d’un
traitement de texte. Plus précisément, il s’agit de créer une fonction qui prend en arguments
une chaîne de caractères et une largeur de ligne (en nombre de caractères), et qui renvoie
cette même chaîne à laquelle ont été ajoutés des séparateurs de lignes aux bons endroits
pour s’assurer que la largeur d’une ligne ne dépasse pas la largeur spécifiée. Comme dans
les logiciels de traitement de textes, les séparateurs de lignes ne seront pas insérés au milieu
d’un mot, mais devront remplacer un espace judicieusement choisi (cf. figure 1).
Plus que la rapidité, un des points clés de ce kata est le travail par étapes et notamment par
tests unitaires. Réfléchissez à ces étapes et aux tests unitaires correspondants.

donc je réfléchieun peu :

public class Wrap {
    //création de deux variables 
    //une chaine de caractère s et la largeur d’une ligne  L
    private String s; 
    private int L;
    public void sort(){}
    public String []Sort(String s, int L){
        this.s=s;
        this.L=L;
        int j =1;
        int i=0;
        int c=0;
        // calcul de nombre de retour à la ligne
        int o= L/s.length()+1;
        String [] array1=new String[o+L] ;
        String [] array2=new String[o+L] ;
        //création d'un tableau après on va mettre des chaines de caractères
        // taille de ce tableau sera la largeur de chaine + nombre de retour en ligne
        for (i=0; i<s.length(); i++)
        {
            array1[i]=String.valueOf(s.charAt(i));
        }
        //insertion de la chaine de caractère dans un tableau
        for (j=1; j<0; j++){
              for ( i=(j-1)*L; i<j*L+1; i++){
                  array2[i-c]=array1[i-c];
                  if ((j*L-i)==0||Equals(array1[i],"")){
                      array2[i]="\n";c=c+j*L-i;}              
                  }
              if (j*L-i-1)==0||array1[i+1]!=""||array1[i]==\s);
           { aray2[i]="\n"; c=c+j*L-i; }
                  
              }
        }
    return array2;
}
private boolean Equals(String string,String string2 ){
    //tod auto generated method stub 
    return flase;
}
        
    }

public class Client {
public static void main (String [] args) throws IOException{ 
new sort(){};
String s ;
s = " entre ta chaine de char, et ta longueur L";
int L = 20; // a titre d'exemple
String [] resultat = new String [s.Lenght()];
resultat =  Sort (s , L);
   
    }
} 

qulqu'un peu m'aider svp merci

1 réponse

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
Modifié par Twinuts le 17/10/2016 à 08:45
Salut,

Tu peux aussi utiliser les expressions régulières pour faire ce que tu veux et c'est plus simple:
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.LinkedList;

public class Test {
 
  public static void main(String[] args) {
    /* Lorem Ipsum */
    final String text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
        + "Integer venenatis lobortis turpis, quis pharetra urna laoreet malesuada. Sed sed porta metus. "
        + "Fusce tristique augue ut lorem molestie, quis varius nibh dignissim. Vivamus consequat tincidunt nisl, "
        + "quis lacinia orci consequat non. Pellentesque euismod, mauris vitae ultricies vehicula, augue diam consequat mi, "
        + "in viverra leo ante ut diam. Nulla et gravida ante. Interdum et malesuada fames ac ante ipsum primis in faucibus.";
  
    final String lines [] = wrap(text, 50);
    for(String line : lines)
      System.out.println(line);
  }

  public static String[] wrap(String text, int width) {
    if (text == null) return new String[0];
    List<String> list = new LinkedList<String>();
    /* regex pour la decoupe */
    Matcher m = Pattern.compile("(\\S\\S{" + width + ",}|.{1," + width + "})(\\s+|$)").matcher(text);
    while (m.find()) list.add(m.group());
    return list.toArray(new String[list.size()]);
  }
}


Dev addict
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..." 
0
Rejoignez-nous