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 :

Savoir si un String peut être parsé en int


Sujet :

Langage Java

  1. #21
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    Je vieux bien mais ton automate il fait exactement le meme travail non? Il va parcourire toute la chaine pour trouver un "patern" correspondant. Vue la composition du java je vois mal comment un regex peut etre plus performant (a moins que la jvm fait appel a une classe system compile.

    Eclairez ma lanterne

  2. #22
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Emplyst
    Je vieux bien mais ton automate il fait exactement le meme travail non? Il va parcourire toute la chaine pour trouver un "patern" correspondant. Vue la composition du java je vois mal comment un regex peut etre plus performant (a moins que la jvm fait appel a une classe system compile.

    Eclairez ma lanterne
    Imagine que tu veux trouver une sous-chaîne de taille m dans une chaîne de taille n.
    L'algorithme "simpliste" consiste à regarder pour chaque position dans la chaîne si la sous-chaîne correspond, ce qui donne un algorithme en O(n*m).
    Bon après avec quelques optimisations, on peut faire baisser un peu la complexité, mais quand même...

    Avec les automates, il me semble qu'il suffit de faire rentrer les n caractères de la chaîne pour obtenir le résultat (ce qui donne une complexité en O(n)).

    Corrigez-moi si je me trompe...

  3. #23
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    OK en apparence mais en arriere de cet automatisme, ce qui se passe exactement c'est quoi tu crois, comment est fait le code?

  4. #24
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Emplyst
    OK en apparence mais en arriere de cet automatisme, ce qui se passe exactement c'est quoi tu crois, comment est fait le code?
    Un automate, c'est simplement un ensemble d'états et une table de transition... Tu es dans un certain état, tu lis une lettre, tu regardes la table de transition, et tu vas dans l'état suivant correspondant...

    Le plus long, c'est de construire l'automate à partir de la regex...

  5. #25
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Citation Envoyé par adiGuba
    Salut,

    Et en quoi le mécanisme d'exception est-il génant ???

    En fait le seul problème c'est que la création d'un exception est assez coûteuse à cause de la génération de son stacktrace (lire : Exception & Performance).

    Donc si tu dois traiter un grand nombre de données incorrectes, il est peut-être préférable de vérifier la chaine avant la conversion pour éviter la génération de ce stacktrace.

    Pour cela tu peux utiliser les Jakarta Commons Lang et la méthode NumberUtils.isNumber()...


    Par contre si les données sont rarement incorrectes, il est préférable d'utiliser un bloc try/catch car cela évite d'analyser deux fois la chaine de caractère...

    a++
    Je pense que tout est dit !! tout dépends le taux d'erreur probable que gérera cette méthode. Si 98% des isNumber() va statistiquement renvoyer "true" dans ton application alors tu te tracasses pour pas grands choses.

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/07/2009, 16h40
  2. Virus ? peut être eu par USB ?
    Par rpatruno dans le forum Sécurité
    Réponses: 24
    Dernier message: 15/09/2008, 00h10
  3. Réponses: 2
    Dernier message: 13/02/2007, 19h02
  4. Réponses: 10
    Dernier message: 10/11/2006, 15h36
  5. Réponses: 2
    Dernier message: 10/03/2004, 19h52

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