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 :

ParseInt subtilité String avec 0


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 55
    Points : 32
    Points
    32
    Par défaut ParseInt subtilité String avec 0
    Bonjour
    quand je fait in Integer.parseInt("058589"), j'ai le retour 58589. Or je souhaiterais garder le "0". et plus généralement tous les chiffres de ma string.
    Comment faire.
    Merci de votre retour.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonsoir,

    Pourquoi le mettre dans un int dans ce cas

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    Salut, tu peux utiliser ce bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DecimalFormat df = new DecimalFormat("00000");
    System.out.println(df.format(mon_nombre));
    Il te reste plus qu'à créer un algo pour connaitre la longueur de ta chaine de caractère. Ensuite créer un String de (la longueur de ton String)*0

  4. #4
    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
    Citation Envoyé par tupac25 Voir le message
    Salut, tu peux utiliser ce bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DecimalFormat df = new DecimalFormat("00000");
    System.out.println(df.format(mon_nombre));
    Il te reste plus qu'à créer un algo pour connaitre la longueur de ta chaine de caractère. Ensuite créer un String de (la longueur de ton String)*0
    Certes. Mais... C'est débile -_-°. D'où la remarque au-dessus.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    Je juge pas l'utilité de ce code, je lui ai juste dis comment faire pour avoir ce qu'il veut.

  6. #6
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour

    Je juge pas l'utilité de ce code, je lui ai juste dis comment faire pour avoir ce qu'elle veut.
    Avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer.parseInt("058589")
    on renvoie une valeur entière, pas une chaine de caractère, juste une représentation binaire d'une valeur numérique.

    Je comprends pas le sujet de ce topic. ni son aboutissement.

    Cordialement
    Page sur Developpez : http://pbriand.developpez.com

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    Et moi je ne comprends pas pourquoi vous bloquez sur ce sujet

    Il désir un entier sous la même forme que sa chaine de caractère. On sait pas ce qu'il souhaite en faire, donc il est difficile de juger si ce code est inutile ou pas

  8. #8
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Ce qu'on comprend, c'est que :
    - il a en entrée une chaîne de caractère.
    - il veut la transformer en entier "formaté", c'est à dire en chaîne de caractère, avec le même format.

    Je propose le code suivant qui est très performant pour faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String chaineFormattee = "058589";

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ça risque de virer au troll tel que c'est parti

    Integer.parseInt(String) convertit une chaîne de caractère en entier et là, le zéro de gauche n'étant pas significatif, il n'est pas affiché.

    La représentation "0123456" est une représentation chaîne de caractères d'un entier et là, il faut utiliser un formateur (comme DecimalFormat) pour avoir le résultat attendu.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    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
    Citation Envoyé par OButterlin Voir le message
    Ça risque de virer au troll tel que c'est parti

    Integer.parseInt(String) convertit une chaîne de caractère en entier et là, le zéro de gauche n'étant pas significatif, il n'est pas affiché.

    La représentation "0123456" est une représentation chaîne de caractères d'un entier et là, il faut utiliser un formateur (comme DecimalFormat) pour avoir le résultat attendu.
    Et dans la mesure où le but annoncé est d'afficher la même chose que la String de départ, on est en droit de se demander pourquoi on n'affiche pas simplement la String de départ.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Candidat au Club
    Homme Profil pro
    forum des professionels
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : forum des professionels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par neonico Voir le message
    Bonjour
    quand je fait in Integer.parseInt("058589"), j'ai le retour 58589. Or je souhaiterais garder le "0". et plus généralement tous les chiffres de ma string.
    Comment faire.
    Merci de votre retour.
    Avec int, les zéros (0) en début de nombre sont ignorés. si vous voulez faire la comparaison, vous pouvez garder les string

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    la discussion date de 2011... je pense qu'on peut clore le débat
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Surtout que c'est faux :

    Citation Envoyé par linguere Voir le message
    Avec int, les zéros (0) en début de nombre sont ignorés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void main(String[] args) {
     
    		int valeur = 01234;
     
    		System.out.println(valeur);
     
     
    	}
    affiche 668 !

    Et oui, un int qui commence par 0 est en octal : le 0 n'est donc pas ignoré, mais à sa propre signification.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Oui mais là, c'est le compilateur qui le fait.
    Dans l'exemple, c'est Integer.parseInt("012345") et là, on renvoie bien 12345
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Et pourquoi ce serait débile ?
    Citation Envoyé par thelvin Voir le message
    Certes. Mais... C'est débile -_-°. D'où la remarque au-dessus.
    Pas parce que TU ne comprend pas que c'est forcément débile -_- ! Si tu as une base de donnée avec des clefs d'identifications .... Tu sais que tu auras, avec le temps, un grand nombre d'ID. Pourquoi ne pas afficher les 0 avant ?

    Pour avoir une validation de ID, exclusivement numérique, valide en calculant le length, tes IDs doivent tous avoir le meme length. Autant ton ID #00001 que ton ID #99999 !

    Et même si TU trouves que ca ne fais toujours pas de sens, si c'est se que le client souhaite ??? Tu vas refuser ?

    Pour ma part, j'ai chercher se Topic car dans mon projet (étudiant) la consigne est d'avoir un ID a 5 chiffres ... Si tel est pas le cas, je dois afficher un message d'erreur ! Si j'ai un ID avec des 0 dabord, la validation indique qu'il n'a pas 5 chiffres ! Alors, moi, ça question je la trouve pertinente dans le cadre de mon projet !

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par MisterFranck Voir le message
    Et pourquoi ce serait débile ?
    C'était peut-être dit un peu crûment, mais il est effectivement absurde de convertir une String en int pour la reformater ensuite en String pour remettre le ou les 0 qu'on aurait perdus lors de la conversion en int. Il suffit de conserver la String d'origine et de ne rien faire.

    Par ailleurs, un identifiant comme tu le décris n'est pas un int, mais une chaîne : le fait qu'elle ne contienne que des chiffres n'en fait pas un int, justement parce que tous les signes ont leur importance au final et que de toute manière le but d'un id n'est pas de servir dans des calculs, mais uniquement pour identifier de façon unique un produit ou quelque chose dans le genre. Ceci est différent d'un nombre résultant d'un calcul qu'on voudrait afficher dans un format particulier (on utiliserait dans ce cas un formatage pour afficher le nombre comme voulu (DecimalFormat, String.format, etc.).

    Et si tu as besoin de saisir une String ne contenant que des chiffres, au nombre précis de 5, tu peux gérer ça avec une String et faire un contrôle du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string.length()==5 && string.matches("\\d+");
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string.matches("\\d{5}");
    On peut même s'assurer qu'il y ait toujours un 0 devant avec 4 chiffres derrière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string.matches("0\\d{4}");
    ou toute autre règle de format qu'on voudrait.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Histoire de rajouter mon grain de sel a cette discussion abracadabrante de 2011 deja uppee en 2015 : tu sais que tu cherches une id a 5 chiffres des le debut donc tu connais le nombre de digit necessaires dans la chaine de sortie donc tu peux padder avec des zero supplementaires dans ton formatter si besoin.

    L'erreur du posteur initial est surtout de ne pas avoir pige qu'il y a une tres grosse distinction entre la valeur numerique et sa representation en chaine de texte. Le 0 en prefixe n'existe pas dans la valeur numerique ; il n'est pas preserve. Il aurait fallu qu'il sauvegarde le nombre de digits au moment de la conversion dans une seconde variable et qu'il le reutilise lors du formattage du nombre pour padder avec des 0.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  18. #18
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par MisterFranck Voir le message
    Et même si TU trouves que ca ne fais toujours pas de sens, si c'est se que le client souhaite ??? Tu vas refuser ?
    Carrément. Si le client te payes, c'est parce que tu comprend mieux l'informatique que lui. Donc, quand il te soumet des abbérations technique (genre stocker des id sous forme de string dans la db avec un nombre de digits déterminé alors que ce qu'il veut vraiment sans en avoir conscience c'est juste un format d'affichage), il est de TON DEVOIR de (poliment) le conduire à changer d'avis.Sinon c'est de la négligence voir une faute professionnelle.
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

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

Discussions similaires

  1. dessiner String avec saut a la ligne?
    Par felben dans le forum 2D
    Réponses: 8
    Dernier message: 12/01/2006, 18h48
  2. Mauvais tri des String avec des accents
    Par lbreuillard dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/09/2005, 12h21
  3. Réponses: 4
    Dernier message: 06/05/2005, 13h37
  4. Réponses: 2
    Dernier message: 29/03/2004, 13h44
  5. string avec Dev-C++ 4
    Par Shadow Blade dans le forum Dev-C++
    Réponses: 15
    Dernier message: 20/03/2003, 18h50

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