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

avec Java Discussion :

Contenu d'un String


Sujet :

avec Java

  1. #1
    Membre régulier
    Homme Profil pro
    Software Engineer
    Inscrit en
    Février 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 139
    Points : 94
    Points
    94
    Par défaut Contenu d'un String
    Bonjour,

    Je récupère une variable String d'une communication pas très fiable, et j'aurai besoin de vérifier que ce String est bien un chiffre entre 0 et 100, auriez-vous une idée de comment je peu faire ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Regarde par ici :

    http://java.developpez.com/telecharg...-nombre-entier

    Je pense que ca doit marcher aussi avec le sdk android

  3. #3
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Il y a plusieurs façon de faire.

    Une méthode un peu bourrin consisterai a essayer de le caster en Integer, et dans le cas ou ça réussi, regarder si il est entre 0 et 100

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    int monInt = -1;
     
    try{
      monInt = Integer.valueOf(maString);
    }
    catch(Exception ex){
      return false;
    }
    return (monInt > 0 && monInt <= 100);
    Sinon tu dois aussi pouvoir le faire avec une regExp

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    entier ou réel entre o et 100.

    Inter.valueOf(chaine);

    ou

    Float.valOf(chaine)

    puis de le test de validité

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    J'ai effectué le même type de recherche il y a peu (je cherchais le meilleur moment de le faire) et j'étais tombé sur cette discussion :
    http://stackoverflow.com/questions/2...nteger-in-java

  6. #6
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    Tu peux aussi vérifier avec un regex que tu as uniquement des chiffres avec quelque chose du genre puis vu que tu es sûr qu'il s'agit de chiffres faire un Integer.valueOf() et la vérification donnée par Nico02

  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
    Si c'est une fois par traitement, Integer.valueOf() est acceptable.

    Mais quand il faut vérifier plein de nombres, on préfèrera Integer.parseInt().
    En effet valueOf() renvoie un Integer, donc un objet. Cet objet est alloué, son constructeur est appelé, et il devra être garbage-collecté ensuite. Tout cela est une mécanique coûteuse.
    Alors que parseInt() renvoie simplement un int, un type de base, construit en itérant sur la String.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    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 thelvin Voir le message
    En effet valueOf() renvoie un Integer, donc un objet. Cet objet est alloué, son constructeur est appelé, et il devra être garbage-collecté ensuite. Tout cela est une mécanique coûteuse.
    Sauf si la majorité est bien entre 0 et 100

  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
    Ah, euh... Ma foi, en effet.
    Mais bon, pas dans le cas général.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Sauf si la majorité est bien entre 0 et 100
    Peux-tu expliciter un peu stp ?

  11. #11
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Je suis aussi preneur de plus d'explications

  12. #12
    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,

    Citation Envoyé par Nico02 Voir le message
    Je suis aussi preneur de plus d'explications
    Je suppose qu'il fait allusion au fait que Integer.valueOf() gère un cache d'objet pour les valeur comprise entre -127 et +127 (si je me souviens bien)...

    Mais bon globalement il faut quand même préférer le type primitif au type wrapper lorsque c'est possible...


    a++

  13. #13
    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
    Tout à fait AdiGuba

    disons que dans le range byte, Integer.valueOf() ne construit pas d'objet, donc la surcharge est beaucoup plus faible (pas de boulot du gc, pas de constructeur, etc), mais quand même,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    créer un int à partir de la String
    trouver ce int dans le cache
    retourner le Integer correspondant
    appeler Integer.intValue() dessus
    comparer

    ca reste plus lent que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    créer un int à partir de la String
    retourner le int
    comparer

  14. #14
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Il y a plusieurs façon de faire.

    Une méthode un peu bourrin consisterai a essayer de le caster en Integer, et dans le cas ou ça réussi, regarder si il est entre 0 et 100

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    int monInt = -1;
     
    try{
      monInt = Integer.valueOf(maString);
    }
    catch(Exception ex){
      return false;
    }
    return (monInt > 0 && monInt <= 100);
    Salut, la logique n'est pas mal du tout. Si ça ne dérangerait pas, en se basant sur ça je te proposerais cette méthode toute faite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static boolean verifier(String maString){
    int monInt = -1;
    try{
      monInt = Integer.parseInt(maString);
    }
    catch(Exception ex){
      return false;
    }
    return (monInt > 0 && monInt <= 100);
    }
    Tu peux l'appeler dans une structure conditionnelle comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(verifier(valChaine){
    //Exécution des instructions relatives à la véracité de l'entier en paramètre
    }else{
    //.......
    }
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  15. #15
    Membre habitué Avatar de Iphelias
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2007
    Messages : 126
    Points : 130
    Points
    130
    Par défaut
    Pour moi la meilleur solution c'est les expressions régulières dans ton cas.

  16. #16
    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
    Pour vérifier si c'est entre 0 et 100 ? Je ne crois pas, non...

    Mais j'aurais tendance à réécrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static boolean verifier(String input){
      try{
        int value = Integer.parseInt(input);
        return value > 0 && value <= 100:
      }
      catch(Exception ex){
        return false;
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    Citation Envoyé par Iphelias Voir le message
    Pour moi la meilleur solution c'est les expressions régulières dans ton cas.
    Après la remarque de tchize_, j'ai fouillé sue le net: il y a plusieurs façons de faire cette transformation String_>entier et le test entre 0 et 100. La regex en fait partie mais n'est pas la plus rapide: en moyenne deux à trois fois plus lente que la plus rapide.

    katze parle de communication. Si le débit est assez, voir très important, cet aspect devient important.

    La solution regex n'est pas obligatoirement la meilleur

  18. #18
    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
    Ce n'est pas qu'une question de performance. La regex est également peu claire, et prend des décisions arbitraires vis-à-vis des zéro devant.

    Si on tient à les refuser ça se discute déjà un peu plus, mais dans le cas général, l'intérêt... C'est d'éviter de programmer par exception, au prix d'une regex imbitable et d'une double vérification. Ça va pas loin.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Vb] Modifier contenu d'un string
    Par Little-Freud dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 25/04/2006, 13h15
  2. [DEBUTANT]Recherche mot contenu dans une String
    Par lynxman dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 11h49
  3. Réponses: 2
    Dernier message: 31/10/2005, 22h04
  4. [STRING]Contenu d'un String <> vers &lt; et &g
    Par TreizeSegments dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 03/08/2004, 08h37
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

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