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 :

utlisation de la méthode String.split pour enlever des espace / Regex expression


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Par défaut utlisation de la méthode String.split pour enlever des espace / Regex expression
    Bonjour,

    Je veux enlever les espaces "blanc" dans du String " -12.121 74.060 5", mon code est le suivant :

    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
     
     
    package vue;
     
    public class WindowsMain {
     
     
    	public static void main(String[] args) {
     
     
        	String line = "    -12.121     74.060   5";
     
    		String[] stab = line.split(" [ \\s]+");
     
    		System.out.println("Taille :" + stab.length);
    	    for (int x=0; x<stab.length; x++)
    	         System.out.println("|"+stab[x]+"|");
     
     
    	}
    }
    Output :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Taille :4
    ||
    |-12.121|
    |74.060|
    |5|
    Comment faire pour ne plus avoir le premier espace et n'avoir que les nombres ? c'est quoi la regex expression qui me permettras cela ?

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    pas besoin de changer de regexp, je pense qu'il suffit de tester chaque token pour voir s'il est vide ou non:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String[] splits = s.split("\\s");
    for(String split : splits) {
      if(!"".equals(split.tim())) {
        // faire qq chose...
      }
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Sinon tu peux faire ceici:

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par tupac25 Voir le message
    Sinon tu peux faire ceici:
    Euh...
    - Si tu le fais avant le split(), ça enlève les séparateurs entre nombres.
    - Si tu le fais après le split(), ça ne change rien à rien.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Par défaut
    Oui, c'est une façon de faire, mais je dois traiter des centaines de milliers de lignes, et je pense qu'une vérification ou des pré-traitements sont un peu coûteux.

    Est ce que la méthode split est plus rapide que le StringTokenizer ?

  6. #6
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Par défaut
    Et merci pour vos réponses !!

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut
    Bonjour,
    pourquoi ne pas tout simplement changer de séparateur entre les nombres?
    Sinon, j'utilise la méthode String.trim() pour supprimer les espaces.

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par neljaouh Voir le message
    Oui, c'est une façon de faire, mais je dois traiter des centaines de milliers de lignes, et je pense qu'une vérification ou des pré-traitements sont un peu coûteux.
    À moins de le faire sur un téléphone portable, des centaines de milliers de lignes n'est rien du tout. Ne t'occupe pas de ce genre d'optimisation, Java s'en sortira mieux que toi. Pas la peine de me croire sur parole, vérifie. La seule optimisation qui doit t'intéresser, c'est le calcul de complexité minimale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Est ce que la méthode split est plus rapide que le StringTokenizer ?
    Non... Elle fait bien plus de choses. Mais pourquoi s'embêter ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par thelvin Voir le message
    À moins de le faire sur un téléphone portable, des centaines de milliers de lignes n'est rien du tout.
    Pas forcément... La création d'une regexp peu s'avérer couteuse.
    Mais c'est facilement corrigeable après coup en cas de problème, et en effet il vaut mieux se centrer sur l'algorithme que sur l'optimisation


    Sinon petite question pour neljaouh : tu veux enlever les blancs... mais pourquoi faire ?
    Je veux dire quel est l'objectif exact de tout cela ?


    a++

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Salut,

    En Python il y a une méthode de chaîne join() qui fusionne plusieurs chaînes en alternance avec un séparateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ch = "    -12.121     74.060   5"
    print '|\n|'.join(ch.split()) 
    # affiche
    -12.121|
    |74.060|
    |5
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ch = "    -12.121     74.060   5"
    print '|' + '|\n|'.join(ch.split()) + '|'
    # affiche
    |-12.121|
    |74.060|
    |5|
    C'est court , et l'avantage est qu'il est plus rapide d'afficher la chaine
    '|-12.121|\n|74.060|\n|5|'
    qu'effectuer séparément l'affichage de plusieurs lignes.



    J’aimerais savoir s’il existe une fonction similaire à join() en Java. Je n’ai pas trouvé dans la doc (après une recherche sommaire).

  11. #11
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Le plus simple me semble de tout simplement utiliser la méthode trim() avant la méthode split().
    Ainsi le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String line = "    -12.121     74.060   5";
    String[] stab = line.trim().split("\\s+");
    for (int x = 0; x < stab.length; x ++) {
        System.out.println("|" + stab[x] + "|");
    }
    Affiche
    |-12.121|
    |74.060|
    |5|
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

Discussions similaires

  1. problème posé par la méthode string.split
    Par jazzfab dans le forum C#
    Réponses: 27
    Dernier message: 17/02/2011, 15h54
  2. Quel est la méthode de lecture pour lire des chars (RAF)
    Par beegees dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 23/07/2007, 07h57
  3. Requete pour enlever des caracteres
    Par Drozo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/08/2006, 16h52
  4. fonction pour enlever des tags
    Par sunp dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 19/12/2005, 20h47
  5. Réponses: 5
    Dernier message: 07/07/2004, 16h05

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