Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[newbie] ma chaine est elle un nombre ?

9 réponses
Avatar
Axel R.
Bonjour,
Je recherche à savoir si une String que j'ai est un nombre ou pas.

Dans les solutions compliquées que j'ai :

- test avec une regexp

- conversion en int et catch de l'exception

- sous fonction qui vérifie que chaque "char" qui la compose est "isDigit"

Existe t'il une solution plus simple ? Quelle est la plus simple (*) de
ces 3 solutions ?

Merci,

Axel

(*) beauté du code, facilité de maintenance etc.

9 réponses

Avatar
Yayel

Bonjour,
Je recherche à savoir si une String que j'ai est un nombre ou pas.

Dans les solutions compliquées que j'ai :

- conversion en int et catch de l'exception



Pour les raisons que tu cites (beauté du code, maintenance ...), je te
conseille cette solution.

Déjà, je ne la trouve pas réellement compliquée : tu fais comme si la
conversion allait bien se passer puis ensuite tu étudies les cas ou ça
ne marche pas.

Ca donne un code très lisible et logique, non ?

Yayel

Avatar
MiXAO
Axel R. wrote:
Bonjour,
Je recherche à savoir si une String que j'ai est un nombre ou pas.

Dans les solutions compliquées que j'ai :

- test avec une regexp

- conversion en int et catch de l'exception


C'est vraiment le cas idéal pour un try catch.

MiXAO

Avatar
Marc Petit-Huguenin
Axel R. wrote:
Bonjour,
Je recherche à savoir si une String que j'ai est un nombre ou pas.

Dans les solutions compliquées que j'ai :

- test avec une regexp

- conversion en int et catch de l'exception

- sous fonction qui vérifie que chaque "char" qui la compose est "isDigit"

Existe t'il une solution plus simple ? Quelle est la plus simple (*) de
ces 3 solutions ?

Merci,

Axel

(*) beauté du code, facilité de maintenance etc.


Dans l'ordre du meilleur au plus mauvais:

1. Regex : Elegant et rapide
2. Verifier chaque char : Moins elegant, mais pourquoi pas.
3. Int et catch: Une abomination. Une exception est faite pour gerer des
cas, euh, exceptionnels. Ici ca n'est pas un cas exceptionnel puisque c'est
l'un des deux cas possibles (int/pas int).

Avatar
MiXAO
Marc Petit-Huguenin wrote:
Axel R. wrote:

Bonjour,
Je recherche à savoir si une String que j'ai est un nombre ou pas.

Dans les solutions compliquées que j'ai :

- test avec une regexp

- conversion en int et catch de l'exception

- sous fonction qui vérifie que chaque "char" qui la compose est
"isDigit"

Existe t'il une solution plus simple ? Quelle est la plus simple (*)
de ces 3 solutions ?

Merci,

Axel

(*) beauté du code, facilité de maintenance etc.



Dans l'ordre du meilleur au plus mauvais:

1. Regex : Elegant et rapide
2. Verifier chaque char : Moins elegant, mais pourquoi pas.
3. Int et catch: Une abomination. Une exception est faite pour gerer des
cas, euh, exceptionnels. Ici ca n'est pas un cas exceptionnel puisque
c'est l'un des deux cas possibles (int/pas int).


Lorsqu'on rédige une *fonction de conversion de chaine en entier*, on a
toutes les raisons de croire qu'une utilisation normal de cette
fonction, c'est de lui passer une chaine représentant un entier.
Si cette chaine n'est pas un entier, alors la fonction est employée de
manière inhabituel; il y a donc exception et c'est le cas tout indiqué.
Ou alors tous mes profs de facs sont des cons.

MiXAO


Avatar
jocelyn
Je suis assez d'accord avec mixao....
Si on y reflechit bien, le traitement d'une exception depend tjrs d'un choix
binaire:
ca a marche ou non/
Le pb est donc plutot de savoir quelles est la frequence des cas
exceptionnels.

Effectivement regexp est certainement tres elegant mais ca me parait sortir
l'artillerie lourde pour pas grand chose.
L'idee de la sous fonction... Pkoi pas mais ca peut se compliquer un peu si
on
désire vérifier que le nombre est question appartient bien à l'intervalle
des int (par exemple).
Et puis ca fait un peu ancienne prog.

PS: ca n'empeche pas qu'une proportion non negligeable de profs de fac sont
des cons ^^

--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même
Avatar
Marc Petit-Huguenin
MiXAO wrote:
Marc Petit-Huguenin wrote:

Axel R. wrote:

Bonjour,
Je recherche à savoir si une String que j'ai est un nombre ou pas.

Dans les solutions compliquées que j'ai :

- test avec une regexp

- conversion en int et catch de l'exception

- sous fonction qui vérifie que chaque "char" qui la compose est
"isDigit"

Existe t'il une solution plus simple ? Quelle est la plus simple (*)
de ces 3 solutions ?

Merci,

Axel

(*) beauté du code, facilité de maintenance etc.




Dans l'ordre du meilleur au plus mauvais:

1. Regex : Elegant et rapide
2. Verifier chaque char : Moins elegant, mais pourquoi pas.
3. Int et catch: Une abomination. Une exception est faite pour gerer
des cas, euh, exceptionnels. Ici ca n'est pas un cas exceptionnel
puisque c'est l'un des deux cas possibles (int/pas int).



Lorsqu'on rédige une *fonction de conversion de chaine en entier*, on a
toutes les raisons de croire qu'une utilisation normal de cette
fonction, c'est de lui passer une chaine représentant un entier.
Si cette chaine n'est pas un entier, alors la fonction est employée de
manière inhabituel; il y a donc exception et c'est le cas tout indiqué.
Ou alors tous mes profs de facs sont des cons.


Oui, mais ici ca n'est pas le cas. La question est de tester si une chaine
contient un nombre ou pas. Il y a donc deux reponses de meme poids: nombre
ou pas nombre. Ca n'est pas la meme chose que d'utiliser Integer.parseInt
pour convertir une chaine en nombre. La on s'attend a ce que la chaine soit
un nombre, et la chaine incorrect est un cas exceptionnel.

Et, en depit de mon respect pour le corps enseignant et sa o combien
difficile mission, tu t'expose a de serieuses deconvenues si tu t'imagine
qu'ils - ou n'importe qui d'autre - possedent la connaissance ultime de
n'importe quel sujet.


MiXAO




Avatar
Marc Petit-Huguenin
jocelyn wrote:
Je suis assez d'accord avec mixao....
Si on y reflechit bien, le traitement d'une exception depend tjrs d'un choix
binaire:
ca a marche ou non/
Le pb est donc plutot de savoir quelles est la frequence des cas
exceptionnels.


L'enonce du probleme est clair: "Je recherche à savoir si une String que
j'ai est un nombre ou pas." Il y a pas de condition exceptionnelle ici.


Effectivement regexp est certainement tres elegant mais ca me parait sortir
l'artillerie lourde pour pas grand chose.


Artillerie lourde? Je ne pense pas:

boolean nombre = chaine.matches("d+");


L'idee de la sous fonction... Pkoi pas mais ca peut se compliquer un peu si
on
désire vérifier que le nombre est question appartient bien à l'intervalle
des int (par exemple).
Et puis ca fait un peu ancienne prog.

PS: ca n'empeche pas qu'une proportion non negligeable de profs de fac sont
des cons ^^



Avatar
MiXAO
Marc Petit-Huguenin wrote:
MiXAO wrote:

Marc Petit-Huguenin wrote:

Axel R. wrote:

Bonjour,
Je recherche à savoir si une String que j'ai est un nombre ou pas.

Dans les solutions compliquées que j'ai :

- test avec une regexp

- conversion en int et catch de l'exception

- sous fonction qui vérifie que chaque "char" qui la compose est
"isDigit"

Existe t'il une solution plus simple ? Quelle est la plus simple (*)
de ces 3 solutions ?

Merci,

Axel

(*) beauté du code, facilité de maintenance etc.





Dans l'ordre du meilleur au plus mauvais:

1. Regex : Elegant et rapide
2. Verifier chaque char : Moins elegant, mais pourquoi pas.
3. Int et catch: Une abomination. Une exception est faite pour gerer
des cas, euh, exceptionnels. Ici ca n'est pas un cas exceptionnel
puisque c'est l'un des deux cas possibles (int/pas int).




Lorsqu'on rédige une *fonction de conversion de chaine en entier*, on
a toutes les raisons de croire qu'une utilisation normal de cette
fonction, c'est de lui passer une chaine représentant un entier.
Si cette chaine n'est pas un entier, alors la fonction est employée de
manière inhabituel; il y a donc exception et c'est le cas tout
indiqué. Ou alors tous mes profs de facs sont des cons.



Oui, mais ici ca n'est pas le cas. La question est de tester si une
chaine contient un nombre ou pas.


En effet, dans ce contexte et en relisant le post initial d'Axel, tu as
raison.


MiXAO




Avatar
Cédric Chabanois
Je ne sais pas quelle est la façon la plus élégante de faire mais le
plus efficace est probablement d'utiliser Integer.parseInt

Les regexp ne sont en standard qu'avec le JDK >= 1.4 et utiliser le jar
de regexp de Apache pour çà bof ...

Maintenant, si ce n'est pas assez élégant, tu peux toujours l'encapsuler
dans une méthode boolean isInteger(String candidate)

Cédric

Marc Petit-Huguenin wrote:

MiXAO wrote:

Marc Petit-Huguenin wrote:

Axel R. wrote:

Bonjour,
Je recherche à savoir si une String que j'ai est un nombre ou pas.

Dans les solutions compliquées que j'ai :

- test avec une regexp

- conversion en int et catch de l'exception

- sous fonction qui vérifie que chaque "char" qui la compose est
"isDigit"

Existe t'il une solution plus simple ? Quelle est la plus simple
(*) de ces 3 solutions ?

Merci,

Axel

(*) beauté du code, facilité de maintenance etc.






Dans l'ordre du meilleur au plus mauvais:

1. Regex : Elegant et rapide
2. Verifier chaque char : Moins elegant, mais pourquoi pas.
3. Int et catch: Une abomination. Une exception est faite pour gerer
des cas, euh, exceptionnels. Ici ca n'est pas un cas exceptionnel
puisque c'est l'un des deux cas possibles (int/pas int).





Lorsqu'on rédige une *fonction de conversion de chaine en entier*, on
a toutes les raisons de croire qu'une utilisation normal de cette
fonction, c'est de lui passer une chaine représentant un entier.
Si cette chaine n'est pas un entier, alors la fonction est employée
de manière inhabituel; il y a donc exception et c'est le cas tout
indiqué. Ou alors tous mes profs de facs sont des cons.




Oui, mais ici ca n'est pas le cas. La question est de tester si une
chaine contient un nombre ou pas.



En effet, dans ce contexte et en relisant le post initial d'Axel, tu as
raison.


MiXAO