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 :

Utilisation de String.split avec une expression régulière


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Utilisation de String.split avec une expression régulière
    Bonjour à tous et à toutes,

    J’essaie d'utiliser la methode split de la class String avec une expression régulière, mais je n'y arrive pas. J'essaie de récupérer les différentes parties d'une coordonnée GPS pour les comparer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String coordonnee= "N 48° 51' 30''";
    String[] coordonneesSeparees = new String[4];
    			coordonneesSeparees = coordonnee.split("\\D+\\p{Space}+\\d{1,2}+°\\p{Space}+\\d{1,2}+\\'\\p{Space}\\+d{1,2}+\'\'");
     
    			for (String s:coordonneesSeparees){
    				System.out.println(s);
    			}
    Est ce la syntaxe de mon expression qui n'est pas bonne? j'ai péché des infos sur le net car je n'est encore jamais utilisé ces expression.

    Le but est de mettre dans chaque case du tableau :
    N
    48
    51
    30

    Merci de vos lumières.

    Cordialement,

    gilou

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coordonneesSeparees = coordonnee.split(" ");
    Ce que tu met en paramètre de split, c'est l'expression su séparateur, et non pas l'expression correspondant à la totalité de ta String. Avec ce que tu as écrit, grosso modo, et en ignorant l'erreur dans l'expression, c'est qu'il faut couper "N 48° 51' 30''" en séparant ce qui se trouve à gauche et à droite de "N 48° 51' 30''". Autrement dit, au mieux, t'arrive avec un résultat vide :/

    Si tu veux travailler avec un expression couvrant la totalité de ta chaine, c'est comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String coordonnee= "N 48° 51' 30''";
    Pattern p = Pattern.compile ("(\\D+)\\p{Space}+(\\d{1,2}+)°\\p{Space}+(\\d{1,2}+)\\'\\p{Space}\\+(d{1,2}+)\'\'");
    Matcher m = p.matcher(coordonnee);
    if (m.matches()){
       System.out.println(m.group(1));
       System.out.println(m.group(2));
       System.out.println(m.group(3));
       System.out.println(m.group(4));
    }

  3. #3
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Gros +1 avec _tchize !
    Il y a juste un + en trop dans la regexp initiale.
    La fin "\\+(d{1,2}+)\'\'" devrait plutôt ressembler à "(\\d{1,2}+)\'\'" !

    Au passage je conseillerais vivement de découper la regexp et de la commenter pour rendre le tout plus lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		Pattern pattern = Pattern.compile("([A-Z])" // Un lettre (groupe 1)
    				+	"\\p{Space}+"		// espaces
    				+	"(\\d{1,2}+)°"		// degrée (groupe 2)
    				+	"\\p{Space}+"		// espaces
    				+	"(\\d{1,2}+)\\'"	// degrée (groupe 3)
    				+	"\\p{Space}+"		// espaces
    				+	"(\\d{1,2}+)\\'\\'"	// seconde (groupe 4)
    			);





    Sinon juste une remarque sur le code initial. C'est quoi çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[] coordonneesSeparees = new String[4];
    coordonneesSeparees = coordonnee.split(...);
    Tu as bien consciences qu'il est complètement inutile de créer un tableau ici ?





    a++

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Gros +1 avec _tchize !
    Faudra demander à Anomaly de nous mettre un bouton +2

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    D'abord merci à vous pour vos réponses rapides,

    Alors oui j'ai voulu en fait récupérer les caractères alphanumériques seulement mais de fait pour comparer après les parties je peux le faire même avec les caractères de ponctuation.

    Je vais donc utiliser la méthode la plus simple avec juste split(" ")

    Merci pour la correction de la regexp. Pour ce qui est de Pattern et matcher, je vais prendre le temps de découvrir un peu plus leurs utilisations. Et pour la création de tableau, j'ai juste copié/collé un peu vite des morceaux de code. Mais merci de le rappeler.

    A la prochaine et merci encore.

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

Discussions similaires

  1. Problème avec une expression régulière ?
    Par MaTHieU_ dans le forum Delphi
    Réponses: 1
    Dernier message: 28/04/2007, 18h50
  2. [RegEx] problème avec une expression régulière
    Par sissi25 dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2007, 09h12
  3. [JMeter] Extraction avec une expression régulière
    Par LittleBean dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 04/04/2007, 17h39
  4. Génération d'un String à partir d'une expression régulière
    Par yang dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/03/2007, 14h21
  5. Problème avec une expression régulière
    Par Darkroro dans le forum Langage
    Réponses: 7
    Dernier message: 09/10/2006, 12h13

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