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

Java Discussion :

[5.0] Ne garder que les caractères essentiels


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut [5.0] Ne garder que les caractères essentiels
    Bonjour,

    J'ai une problématique assez basique.

    J'ai une chaîne de caractères dans laquelle je veux :
    • Tout mettre en majuscules
    • Supprimer les accents
    • Remplacer les caractères spéciaux par des espaces
    • Supprimer les espaces inutiles (début, fin et doubles espaces)


    Etant en Java 5, voilà comment j'ai procédé :
    Code Java : 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
    // Tout mettre en majuscules
    String chaineIntermediaire = chaineInitiale.toUpperCase();
     
    // Supprimer les accents
    ville = Normalizer.normalize(chaineIntermediaire, Normalizer.DECOMP, 0).replaceAll("[\u0300-\u036F]", "");
     
    // Remplacer les caractères spéciaux par des espaces
    String chaineFinale = "";
    for (Character ch : chaineIntermediaire.toCharArray()) {
    	if (Character.isLetterOrDigit(ch))
    		chaineFinale += ch;
    	else
    		chaineFinale += " ";
    }
     
    // Supprimer les espaces inutiles
    chaineFinale = chaineFinale.trim();

    Je trouve la méthode un peu lourde, n'y a-t-il pas moyen de faire plus simple ?
    Je n'arrive pas à supprimer les doubles espaces de manière simple, une idée ?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu peux remplacer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String chaineFinale = "";
    for (Character ch : chaineIntermediaire.toCharArray()) {
    	if (Character.isLetterOrDigit(ch))
    		chaineFinale += ch;
    	else
    		chaineFinale += " ";
    }
    par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chaineFinale = chaineIntermediaire.replaceAll("[^A-Za-z0-9]+"," ");
    De plus, évite l'arithmétique sur les chaines dans un boucle, chaque opération "+" entraine la création d'un stringbuilder et d'une nouvelle chaine. Autant faire une seule fois la chaine (à la fin) et une seule fois le StringBuilder (au début)

  3. #3
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tu peux remplacer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String chaineFinale = "";
    for (Character ch : chaineIntermediaire.toCharArray()) {
    	if (Character.isLetterOrDigit(ch))
    		chaineFinale += ch;
    	else
    		chaineFinale += " ";
    }
    par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chaineFinale = chaineIntermediaire.replaceAll("[^A-Za-z0-9]+"," ");
    De plus, évite l'arithmétique sur les chaines dans un boucle, chaque opération "+" entraine la création d'un stringbuilder et d'une nouvelle chaine. Autant faire une seule fois la chaine (à la fin) et une seule fois le StringBuilder (au début)
    Ah merci, je me demandais comment faire une expression régulière "inversée".

    Une idée pour les doubles espaces peut être ? Si je fais maChaine.replace(" ", " "); est-ce que les triples espaces auront également disparus ?

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Pour faire une suppression des accents propre (remplacer é, è, ê par e, etc.), plusieurs solutions sont dans la http://java.developpez.com/faq/java/...primmer_accent

    Personnellement, je trouve que la méthode la plus propre est l'utilisation de la librairie dédiée ICU4J d'IBM, même si celle-ci est lourde pour cette seule fonction (environ 4Mo).

    Pour la suppression des caractères spéciaux en début/fin de chaîne, la méthode trim() est toute indiquée.

    Enfin, pour les caractères spéciaux à l'intérieur de ta chaîne, la méthode de tchize_ me semble impeccable !
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Citation Envoyé par CyberChouan Voir le message
    Pour faire une suppression des accents propre (remplacer é, è, ê par e, etc.), plusieurs solutions sont dans la http://java.developpez.com/faq/java/...primmer_accent

    Personnellement, je trouve que la méthode la plus propre est l'utilisation de la librairie dédiée ICU4J d'IBM, même si celle-ci est lourde pour cette seule fonction (environ 4Mo).

    Pour la suppression des caractères spéciaux en début/fin de chaîne, la méthode trim() est toute indiquée.

    Enfin, pour les caractères spéciaux à l'intérieur de ta chaîne, la méthode de tchize_ me semble impeccable !
    J'ai bien pris exemple sur la FAQ. Etant donné que j'ai pas mal de restrictions, j'ai opté pour la solution du Normalizer Java 5

    Pour ce qui est des espaces, en début et fin de chaîne j'ai bien utilisé trim(), mais au milieu ?

    Enfin, pour ce que m'a donné tchize_ me semble effectivement tout à fait convenir.

    Pour les espaces au milieu, voici comment j'ai procédé pour l'instant :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (maChaine.contains("  ")) {
    	maChaine = maChaine.replace("  "," ");
    }

  6. #6
    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
    pour supprimer les espaces multiples, le plus simple est de faire avec une expression régulière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = chaine.replaceAll(" +", " ");

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2013, 12h19
  2. garder que les doublons ?
    Par deby23 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/02/2008, 13h41
  3. Garder que les 10 premiers caractère d'une variable
    Par dembroski dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2007, 16h18
  4. Réponses: 3
    Dernier message: 15/06/2007, 14h53
  5. JavaScript/Zone de texte : n'accepter que les caractères numériques
    Par arkienou dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/07/2006, 14h16

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