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 :

RegExp Javascript en Java


Sujet :

Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 415
    Points : 125
    Points
    125
    Par défaut RegExp Javascript en Java
    Bonjour,

    je voudrais porter ce code javascript en java, si vous pouviez me donner un coup de main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var txtExp=/dans/g;
    var monTexte="Il y a 3600 secondes dans 1 heure et 24 heures dans une journée";
    var pos="";
    var match = txtExp.exec(monTexte);
    while (match != null)
    {
    pos+=match.index+" "+match[0].length+" ";
    match = txtExp.exec(monTexte);
    }
    document.write(pos);
    merci de votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonsoir,

    Je ne comprends pas trop l'intérêt de ce code, mais voici un équivalent JAVA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String monTexte = "Il y a 3600 secondes dans 1 heure et 24 heures dans une journée";
    Matcher txtExp = Pattern.compile("dans").matcher(monTexte);
    String pos = "";
    while (txtExp.find()) {
         pos += txtExp.start() + " " + (txtExp.end() - txtExp.start()) + " ";
    }
    System.out.println(pos);
    Romain.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 415
    Points : 125
    Points
    125
    Par défaut
    ton code fonctionne, mais s'avère très lent, il faut 8 secondes pour faire ce calcul avec 200 mots à rechercher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String monTexte = "Il y a 3600 secondes dans 1 heure et 24 heures dans une journée...fin du texte";
    Matcher txtExp = Pattern.compile("mot1|mot2|...|mot199|mot200").matcher(monTexte);
    String pos = "";
    while (txtExp.find()) {
         pos += txtExp.start() + " " + (txtExp.end() - txtExp.start()) + " ";
    }
    System.out.println(pos);
    Existerait-il un moyen d'optimiser ce code ? c'est trop long
    merci

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    Bonjour,

    Je viens d'essayer ton code et pour bien plus de 200 mots je suis à quelques millisecondes... Je pense qu'il faudrait déterminer plus finement quelles instructions posent problème en ajoutant par exemple des System.currentTimeMillis().
    Dans ton code ce qui peut poser problème c'est :
    - Le "matcher"
    - Le "find"
    - La concaténation des "pos" avec des +. En utilisant des StringBuilder ça irait surement plus vite.

    Mathieu

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Tu peux nous donner le test complet que tu as fait qui prend 8 secondes ? Sans ça difficile de t'aider !

    Romain.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 415
    Points : 125
    Points
    125
    Par défaut
    après des tests, si au lieu de faire un gros regex, je fais plein de petits, il faut moins d'une seconde pour faire le calcul, j'ai trouvé un article où il dise que si la chaîne est trop longue, ça patine dans la semoule.

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    De fait, c'est carrément l'inverse du but des regex.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 415
    Points : 125
    Points
    125
    Par défaut
    oui, en effet, je pense que la classe Pattern aurait besoin d'optimisation.

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Moi je pense qu'il n'a jamais été question de s'en servir comme ça.

    De manière générale, si on se dit que Java a prévu de nous encourager à écrire des String de quinze mètres de long directement dans le code source, on se trompe.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [REGEXP/javascript] sous chaine entre ""?
    Par valal dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/05/2007, 11h54
  2. Comment utiliser javascript dans java ?
    Par Le Débutant dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 22/01/2007, 16h39
  3. Exécuter du javascript depuis java
    Par Shivacdbs dans le forum Général Java
    Réponses: 3
    Dernier message: 24/11/2006, 12h32
  4. VBscript VS VB, JavaScript VS Java
    Par BilTCD dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 22/11/2006, 19h14
  5. Techno Ajax: javascript, servlet java
    Par xfacq dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/08/2006, 17h08

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