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 :

[String]effacer espaces en trop


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut [String]effacer espaces en trop
    bonjour à tous, voila je suis débutant en java et j'ai créé un petit programme.
    Normalement il est censé "retirer" les espaces intuile dans une phrase. Le souci est que lorsque deux mots sont séparés par plus de deux espaces le programme fonctionne plus.
    Voici le listing :



    class Latex {
    //enleve les espaces superflus dans une phrase passée en tableau

    public static void espace(char[] tab) {
    //enleve espaces superflus dans le tab

    //variables
    final char BLANC = ' ';

    for (int i=0; i<= tab.length-2; i++) {
    if (tab[i] == BLANC && tab[i+1] == BLANC) {
    for (int j = i+1; j <= tab.length-2; j++)
    tab[j] = tab[j+1];
    tab[tab.length-1] = BLANC;
    }
    }

    for (int k=0; k<=tab.length-1; k++)
    System.out.print(tab[k]);

    }

    public static void main(String[] args) {

    //variable tab
    char[] tab = new char[5];

    //initialisation tab
    tab[0]='G';
    tab[1]=' ';
    tab[2]=' ';
    tab[3]=' ';
    tab[4]='M';

    //appel de espace()
    espace(tab);
    }
    }

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut Re: debutant qui a besoin d'aide pour un programme
    Salut,

    Citation Envoyé par showlap1
    Normalement il est censé "retirer" les espaces intuile dans une phrase. Le souci est que lorsque deux mots sont séparés par plus de deux espaces le programme fonctionne plus.
    tu peux préciser quand tu dis "le programme fonctionne plus", parce que j'ai regardé ton code, ça fait exactement ce que tu veux (sauf qu'il balance des espaces en pagaille en fin de tableau mais bon...)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    'soir,

    Voilà qques idées pour ton code :
    ta méthode espace doit renvoyer un tableau de caractères et non void.
    l'affichage doit se faire hors méthode espace
    A mon avis, l'utilisation des char[] n'est pas des plus pratique. Utilise plutôt des string si tu le peux.

    Voilà un bout de code qui permet de faire ce que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public static char[] removeSpace(char[] _tab) {
    		StringBuffer stringBuffer = new StringBuffer();
    		for (int i = 0; i < _tab.length; i++) {
    			if (_tab[i] != ' ')
    				stringBuffer.append(_tab[i]);
    		}
    		return stringBuffer.toString().toCharArray();
    	}

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Ca va lui virer tous les espaces ton code... j'avais cru comprendre qu'il désirait supprimer les espaces en trop... donc au moins en garder un...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Et avec une regexp : style remplacer tous les <espace><espace>+ par <espace> ? Et avec un StringTokenizer avec espace comme separateur (et apres on reconstruit la chaine en ne metant qu'un seul espace entre chaque token) ?...

    Sinon c'est clair que ce sera de toute bien plus simple en manipulant une String plutot qu'un char[].
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    303
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 303
    Par défaut
    essaye cela, ca devrait marcher. Ton code est trés compliqué pour ce qu'il doit faire. il n'y a besoin que d'une seulle boucle.
    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
     
    public static void espace(char[] tab) {
    		// enleve espaces superflus dans le tab
     
    		// variables
    		final char BLANC = ' ';
    		char[] tabRelai = new char[tab.length];
    		int index = 0;
    		for (int i = 0; i < tab.length; i++) {
    			if (tab[i]!= BLANC ||(i+1 < tab.length && tab[i+1] != BLANC)){
    				tabRelai[index] = tab[i];
    				index++;
    			}
    		}
    		tab = tabRelai;
    		for (int k = 0; k <index; k++)
    			System.out.print(tab[k]);
    	}

  7. #7
    Membre éclairé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Par défaut
    ou comme ca c'est encore plus simple:


    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
     
     
    public static void espace(char[] tab) { 
     
        String s = new String(tab)
     
        s = s.replaceAll(" ", "");
     
        tab = s.toCharArray();
     
     
        for (int x=0; x<tab.length; x++) 
             System.out.print(tab[x]); 
     
    }

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Par défaut
    Tu as une autre méthode, c'est de séparer l'ensemble de ta chaine avec un StringTokenizer, en gros, ca va te séparer ta phrase en mots, il te suffit de la reconstruire simplement apres comme tu le souhaites, en rajoutant un seul espace entre chaque token...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Cette méthode remplace les suites de blancs à partir de 2 occurences par un seul blanc.

    Je pense que ca réponds à ton problème.


    String s = new String(tab);


    s = s.replaceAll(" {2,}"," ");

    Arnaud

    cf Pattern (Regex) :
    X{n,} X, at least n times

  10. #10
    Membre averti
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut
    merci beaucoup pour toutes ces réponses, en effet vos codes sont beaucoup plus cours que le mien. Malheureusement ils restent encore un peu obscure (1ere année de dut info, j'en suis aux bases de java). Je vais donc me plonger dans mon bouquin java préféré !!

    merci

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

Discussions similaires

  1. Effacer les espace de trop
    Par phoenix345 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/10/2010, 19h26
  2. [HTML] Un espace en trop dans une frame
    Par Jim_Nastiq dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/05/2006, 11h58
  3. [HTML] espaces en trop
    Par Anduriel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/11/2005, 20h44
  4. SQL String // Chaine de caractères trop longue
    Par Didier100 dans le forum Bases de données
    Réponses: 7
    Dernier message: 17/10/2005, 21h57
  5. conversion String en Date (parse trop permissif)
    Par ciloulou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/09/2004, 18h36

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