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 :

Découper un chaîne selon un nombre Maxi de caractères


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut Découper un chaîne selon un nombre Maxi de caractères
    Bonjour Débutant en java, j'aimerais découper ma chaine de caractère selon le caractère poin "." et aussi selon le nombre de caractère qu'elle contient, le mien doit contenir 6 caractère au maximum sinon si nous rencontrons un point "." avant les 6 caractère bas on découpe quand même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    String[] découpé = "boo.and.foo".split(".");
    // découpé[0] = "boo", découpé[1] = "and" et découpé[2] = "foo"
     
    ================================
    int MAXCAR = 6;
    String[] tronk = new String[MAXCAR];
     
    for (int i =0; i > MAXCAR-1; i++)
    			{
    			tronk = chaine.split(".");
    			System.out.println("tronk["+i+"] " + tronk[i]);
    			}
    //Ce code ne m'affiche pas le le contenu de tronk[i];
    pour découper selon le nombre max de caractère, je n'arrive pas. je pense qu'avec le machaine.lenght(), il y a moyen, mais dur dur de trouver la syntaxe appropriée.

    Merci

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Le problème vient du fait que split utilise les expression régulière. le caractère . ayant la signification de "n'importe quel caractère" dans une expression régulière.

    Ton code peut être grandement simplifié.
    - le plus simple pour récupérer une partie d'une chaine la méthode est substring().
    - pour connaitre la position d'un caractère dans la chaine, c'est indexOf().

    Dans ton cas il faudrait faire quelquechose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int index = chaine.indexOf(".");
    if (index==-1) index = chaine.length(); //prendre toute la chaine si pas de "."
    if (index>6) index=6; //prendre 6 caractères, si plus de 6 caractères.
    String resultat = chaine.substring(0,index);

  3. #3
    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
    Par défaut
    Voila ton code retouché,il marche comme tu le voulais :
    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
    String[] découpé = "boo.and.foo".split(".");
    		// découpé[0] = "boo", découpé[1] = "and" et découpé[2] = "foo"
     
     
    		int MAXCAR = 6;
    		String[] tronk; //= new String[MAXCAR];
    		String chaine="boo.and.foo";
    		tronk = chaine.split("\\.");
    		int tailleMax=(tronk.length>6)?MAXCAR:(tronk.length);
    		System.out.println(tronk.length);
    		for (int i =0; i < tailleMax; i++)
    					{
    					System.out.println("tronk["+i+"] " + tronk[i]);
    					}
    		//Ce code ne m'affiche pas le le contenu de tronk[i];
    Il y'avait plusieurs erreurs:
    -Le "." est un caractere spécial en java, il fallait l'echapper
    -Dans la boucle "for" l'instruction du milieu c'est la condition de validité de la boucle
    -Je t'ai également mis une condition Max qui est fonction de la taille MAXCAR et du nombre de mots séparés par des "."
    Ca devrait te debloquer

  4. #4
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Merci à vous les gars vous êtes géniaux. j'ai essayer de griffoner une fonction tronque, qui découpe quand le caractère est trop long et lui rajoute un point à la fin.
    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
     
    static String tronque(String str, int MAXCAR ) 
    	{ 
    	String text;
    	int poSpace;
    	// Si le nombre de caractères présents dans la chaine 
                 //est supérieur au
    	// nombre
    	// maximum, alors on découpe la chaine au nombre de caractères
    	if (str.length() > MAXCAR ) 
    	{ 
    str = str.substring( 0, MAXCAR ); 
    poSpace = str.indexOf(" "); // on récupère l'emplacement du dernier
    									// espace dans la chaine, pour ne pas
    									// découper un mot.
    text = str.substring(0, poSpace); // on redécoupe à la fin du   
                //dernier mot
    str = str.concat("."); // puis on rajoute un .
    	} 
    	return str; // on retourne la variable modifiée
    	}
    Je vous le soumet pour avoir des avis et si possible des corrections
    Merci

  5. #5
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Merci à vous les amis je teste le tout, mais regarder ma fonction.

  6. #6
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    DevServlet Voila ton code retouché,il marche comme tu le voulais :


    DevServlet, j'ai testé ton code, il marche quand j'ai un point au mileu de ma chaine,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Entrer votre chaîne de caractère en terminant par un point '.' : azer.tyuio
     tronk.length 2
    tronk[0] azer
    tronk[1] tyuio
     
     votre chaîne de caractère ne contenait pas de point '.' à la fin
    azer.tyuio.
    mais quand la chaîne dépasse 6 caractère, il ne la découpe pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Entrer votre chaîne de caractère en terminant par un point '.' : azertyuiopqsd
     tronk.length 1
    tronk[0] azertyuiopqsd
     
     votre chaîne de caractère ne contenait pas de point '.' à la fin
    azertyuiopqsd.
    Je vais essayer de fusionner ton et celui de Uther et on verra ce que ça va donner. Merci

  7. #7
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    DevServlet, je continue les tests avec tes codes et je vois que tu as tout renversé. Le nombre maxi de séparateur est égale à 6 alors que ce que je voulais c'est découper dès que les caractères de ma chaîne sont supérieur à 6 ou si l'on rencontre un point .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    MAXCAR = 6
    tronk = chaine.split("\\.");
    index = (tronk.length > 6) ? MAXCAR : (tronk.length);
    tronk.length > 6; 
    // ce n'est pas ça je voulais
    ***********************************************
    //je voulais ce qui est en dessous
     
    if (machaine.length() > MAXCAR) || (point = machaine.indexOf('.')); 
    // découper si machaine est supérieur à 6 
    //ou 
    //si je rencontre un point dans machaine.
    Mon soucis, vue que je suis débutant, pas facile de mettre en code le découpage.

    Merci pour votre aide.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/01/2015, 11h42
  2. nombre maxi de caractères
    Par NicolasMO dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/09/2007, 21h48
  3. tri selon le nombre d'enregistrement
    Par bugbug dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/12/2005, 13h57
  4. Comment découper une chaîne de caractères en VBA
    Par TomPad dans le forum Access
    Réponses: 3
    Dernier message: 23/06/2005, 09h58
  5. Découper une chaîne de la droite
    Par Gourouni dans le forum ASP
    Réponses: 4
    Dernier message: 10/03/2005, 11h38

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