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

Collection et Stream Java Discussion :

[Regex] exemple de l'API optimisable ?


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué Avatar de Celeborn
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 156
    Points
    156
    Par défaut [Regex] exemple de l'API optimisable ?
    bonjour,

    il existe dans l'api java, pour la class scanner un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String input = "1 fish 2 fish red fish blue fish";
         Scanner s = new Scanner(input);
         s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
         MatchResult result = s.match();
         for (int i=1; i<=result.groupCount(); i++)
             System.out.println(result.group(i);
         s.close();
    et je me demandais si il ne serait pas possible dans cette exemple donné, de modifier l'expression régulière en mettant "(qqch fish)*" puisque c'est lui le délimiteur.
    en faite ma question qui se cache derière est peut on récupéré autant de fois que nécessaire des données correspondante à une structure particulière ?

  2. #2
    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 Re: [Expression régulière] example de l'API optimisable ???
    Salut,

    Citation Envoyé par Celeborn
    et je me demandais si il ne serait pas possible dans cette exemple donné, de modifier l'expression régulière en mettant "(qqch fish)*" puisque c'est lui le délimiteur.
    Cela dépend de ce que tu recherches... Dans l'exemple la chaine recherché doit correspondre à "<nombre> fish <nombre> fist <chaine> fish <chaine>"... Si tu raccourcis le pattenr tu ne peux plus vérifier l'ordonnancement exact (par exemple "1 fish red fish 3 fish blue fish" ne conconde pas avec le pattern de l'exemple).

    Citation Envoyé par Celeborn
    en faite ma question qui se cache derière est peut on récupéré autant de fois que nécessaire des données correspondante à une structure particulière ?
    Dans cette exemple la méthode findInLine() renvoit toute la chaine (ou presque). Si on considère que tu ne veux pas différencier les nombres/chaines ni l'ordonnancement, tu peux faire la même chose en appellant plusieurs fois findInLine() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		String input = "1 fish 2 fish red fish blue fish";
    		Scanner s = new Scanner(input);
     
    		while ( s.findInLine("(\\w+) fish") != null) {
    			MatchResult result = s.match();
    			System.out.println(result.group(1));
    		}
    Les regexp sont assez puissantes et tu peux définir pas mal de format : http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html

    a++

  3. #3
    Membre habitué Avatar de Celeborn
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 156
    Points
    156
    Par défaut
    merci pour ta reponse,

    j'ai regardé le lien, et ce que je n'arrive pas a faire c par exemple :

    "(\\d+) numéro; (\\d+)+ ; (\\d+) numéro"

    en faite je ne sais pas combien de fois il y a de nombre ecrit au milieu, cela peut varier en fonction des entrées.

    pourtant dans la partie quantifieur ils disent
    X+ X, one or more times
    Si vous avez la moindre idée,
    merci d'avance...

  4. #4
    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
    Ceci "(\\d+)+" n'est pas trèc correct : cela signifie une valeur décimal 1 ou plusieurs fois, et ceci 1 ou plusieurs fois. Mais sans séparateur ca n'a pas de sens...

    Il faudrait que tu donnes quelques exemples de chaines que tu peux avoir en entrée pour que ce soit plus clair... ainsi que le résultat que tu veux avoir...

    a++

  5. #5
    Membre habitué Avatar de Celeborn
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 156
    Points
    156
    Par défaut
    hum par exemple

    "debut 1; 2; 3; 4; 5; 6; fin"
    "debut 4; 57; fin"
    "début 1;
    fin"
    "début 45;84 fin"

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 106
    Points : 130
    Points
    130
    Par défaut
    Connais tu StringTokenizer
    Il te permet de découper une chaine avec un delimiter et de te renoyer les morceaux dans un tableau.
    J'ai pas trop compris les données que tu manipules mais peut être que le tokenizer pourra t'aider.

    http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html

  7. #7
    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
    Je pense aussi que la classe Scanner n'est pas la meilleure solution...

    Tu peux directement faire cela en utilisant les regex en deux étapes : une pour vérifier le format global de la chaine, et une pour rechercher les différentes valeurs numériques :

    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
    import java.util.*;
    import java.util.regex.*;
     
    public class Main {
     
        public static void main(String[] args) throws Exception {
     
    		String input = "debut 1; 2; 3; 47; 586; 6; fin";
    		String pattern = "debut (\\d+; )+fin";
     
    		if (input.matches(pattern)) {
    			Matcher numMatcher = Pattern.compile("\\d+").matcher(input);
    			while (numMatcher.find()) {
    				System.out.println("Nombre : " + numMatcher.group());
    			}
    		}
        }
    }
    a++

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

Discussions similaires

  1. Exemple saisie et API
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 5
    Dernier message: 03/06/2009, 15h10
  2. exemple de l'API JcronTab
    Par hb2ee dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 16/05/2009, 10h03
  3. exemple api sql avec easyphp
    Par cedni dans le forum C++Builder
    Réponses: 3
    Dernier message: 17/10/2007, 16h08
  4. [API C] se connecter sous Oracle : optimisation
    Par fages dans le forum Interfaces de programmation
    Réponses: 5
    Dernier message: 18/05/2006, 22h08
  5. Réponses: 14
    Dernier message: 12/05/2006, 08h20

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