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 :

des caractères espaces en 1


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Par défaut des caractères espaces en 1
    Voilà !

    Je veux écrire une fonction qui, étant donné une chaine de caractères, renvoie la chaine, mais toutes les suites de caractères espaces sont remplacés par un seul.
    S' il y a 2 caractères espaces qui se suivent, l' un des deux disparaît.

    je peux donc utiliser la méthode de la classe String replaceAll(" ", " "). 2 caractères deviennet un seul

    Mais le problème c' est que s' il ya 3 caractères espaces qui se suivent, il doit en rester un seul.

    Se sachant pas à priori si la chaine contient que des doubles espaces ou des triples, ou même plus, comment faire.

    J' ai donc imaginé cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /* Ecrire une fonction qui, étant donné une chaine de caractères, teste la présence d' au moins deux caractères espaces contigus.*/
                    public static boolean espacesContigusChaine(String chaine)
    		{
    			boolean verite = true;
    			for(int i = 0; i < (chaine.length() - 1); i++)
    			{
    				if(chaine.charAt(i) == ' ' && chaine.charAt(i+1) == ' ')
    				verite = true;
    				else
    				verite = false;
    			}
    			return verite;
    		}
    Ensuite, j' ai créé ma fonction qui transforme toute suite de caractères espace (quelque soit le nombre) en un seul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    public static String desSuitesEspacesEnUn(String chaine)
    {
    	while(espacesContigusChaine(chaine));
    	{
    		chaine = chaine.replaceAll("  ", " ");// remplacer double par simple
    	}
     
     
    			return chaine;
    }
    Comme vous le voyez dans le code, je dis, tant qu' on trouvera au moins deux espaces qui se suivent dans la chaine, remplacer double espace par simple espace.

    Lorsque j' affiche la chaine transformée, y a problème. Les doubles espaces sont transformées en simple. Mas les triples sont transformés en double et les quatruple en triple. En fait, la fonction enlève un seul espace dans toute suite d' espace.
    C' est comme si le tant que ( while(espacesContigusChaine(chaine)); )ne servait à rien.

    Aider moi à trouver ce qui cloche

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 398
    Par défaut
    tu parcours ta chaine caractere par caractere
    si tu es sur espace, tu gardes un pointeur sur le caractere courant (un indice)
    tu parcours avec un second indice jusqu'a trouver autre chose qu'espace
    et une fois le parcours fait, tu as deux indices, tu remplaces ce qu'il y a entre les deux indices par un seul espace

  3. #3
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    En utilisant une expression régulière, je pense que ça ne peut que t'avantager.

    Il te suffit de faire un replaceAll en utilisant \s{2,} qui correspond à des caractères blancs comme l'espace, la tabulation, etc... Le {2,} permet de spécifier que tu n'appliques la modification qu'à partir de 2 éléments blancs se suivant.

    Voilà juste l'idée, ma syntaxe n'est peut être pas la bonne

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Salut,

    Tu pars sur du compliqué la
    La méthode replaceAll attend une expression régulière donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine.replaceAll("\\s+", " ");
    devrait suffire


    EDIT: arg déjà dit

  5. #5
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine.replaceAll("\\s{2,}", " ");
    Voilà à 2 on y est arrivés

    Par contre, évite le \\s+ sinon cela va remplacer tes espaces blancs uniques par des espaces blancs uniques donc cela traitera inutilement certains espaces si tu m'as compris

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Par défaut
    Bonsoir, j'aimerais faire un peu pareil mais en fait, je voudrais simplement supprimer les tabulation en début de ligne.
    Je pensais aux expression réguilière mais je ne sais pas comment faire, vu que dès fois il y' a des grand espaces que je ne veux pas forcément supprimer.
    Merci de votre aide.

    A+
    dede

    EDIT : Quand j'utilise cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str.replaceAll("\\s{2,}", " ");
    Ca change rien a ma chaine... Est-ce normal?
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string avant cleaning
        Option         "Composite" "Enable"
    string après cleaning
        Option         "Composite" "Enable"
    EDIT2 : Mon problème est résolu!!!! Même pas besoin de supprimmer les tabulation avec les expressions régulières... Chuis trop bête!

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    C'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taChaine = taChaine.replaceAll("\\s+", " ");
    Là tu n'affectais pas le résultat à ta variable, donc ça servait à rien

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    dedesite,
    Bonsoir, j'aimerais faire un peu pareil mais en fait, je voudrais simplement supprimer les tabulation en début de ligne.
    Jette aussi un oeil à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maChaine = maChaine.trim();
    Nicolas

  9. #9
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Par défaut
    Citation Envoyé par sironimo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine.replaceAll("\\s{2,}", " ");
    Voilà à 2 on y est arrivés

    Par contre, évite le \\s+ sinon cela va remplacer tes espaces blancs uniques par des espaces blancs uniques donc cela traitera inutilement certains espaces si tu m'as compris
    Je réagit un peu tardivement parce que je voulais apprendre les expressions régulières. Ce que je n' avais jamais fait.
    J' avoue qaue je n' ai pas compris grand chose pour l' instant. Mais avec un peu de patience, je suis sûr que j' y arriverai.
    En attendant, pouvez-vous m' expliquer en termes clairs ce que signifie
    ("\\s{2,}", " ") ?
    M' expliquer chacun des caractères \ et \ et s et { et 2 et , et }

    Je pense que ça pourrait même me donner un coup de pouce dans mon étude des expressions régulières.

    Merci !

  10. #10
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Regarde ce tutoriel réalisé par Cyberzoïde ICI concernant les expressions régulières, tu devrais comprendre la syntaxe.

  11. #11
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Par défaut
    Citation Envoyé par sironimo
    Regarde ce tutoriel réalisé par Cyberzoïde ICI concernant les expressions régulières, tu devrais comprendre la syntaxe.
    C 'est justement le tutoriel que je suis entrain d' étudier et ce n' est pas facile. Je ne doute pas que je puisses comprendre un jour. Mais en attendant, pourriez vous m' expliquer ceci : "\\s{2,}" ?
    Mercid ' avance

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

Discussions similaires

  1. [WD15] Espacement des caractères dans champ saisie
    Par DanielB dans le forum WinDev
    Réponses: 15
    Dernier message: 21/05/2020, 00h35
  2. Comment réduire l'espacement des caractères ?
    Par jmbinformatique dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 11/12/2013, 15h54
  3. Réponses: 2
    Dernier message: 23/11/2012, 09h47
  4. Réponses: 3
    Dernier message: 19/07/2010, 14h18
  5. insérer des caractères accentués INFORMIX/JDBC
    Par donde dans le forum Informix
    Réponses: 2
    Dernier message: 19/11/2002, 20h02

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