Je porte un petit extrait de code PHP sur java en ce moment, et je is_numeric($x)
sur la fonction is_numeric($x)
pour déterminer si $x
est un nombre ou non. Il ne semble pas exister de fonction équivalente en Java, et je ne suis pas satisfait des solutions actuelles que j’ai trouvées jusqu’à présent.
Je me penche vers la solution d’expression régulière trouvée ici: http://rosettacode.org/wiki/Determine_if_a_ssortingng_is_numeric
Quelle méthode dois-je utiliser et pourquoi?
Notez que la fonction PHP isNumeric () déterminera correctement que la notation hexadécimale et scientifique est un nombre auquel l’approche de regex à laquelle vous liez ne correspondra pas.
Une option, en particulier si vous utilisez déjà des bibliothèques Apache Commons, consiste à utiliser NumberUtils.isNumber () , de Commons-Lang. Il va gérer les mêmes cas que la fonction PHP va gérer.
Avez-vous cherché à utiliser la bibliothèque SsortingngUtils ? Il existe une fonction isNumeric () qui pourrait être ce que vous recherchez. (Notez que “” serait évalué à true)
C’est généralement une mauvaise idée d’avoir un numéro dans une chaîne. Si vous souhaitez utiliser ce nombre, parsingz-le et utilisez-le sous forme numérique. Vous ne devriez pas avoir besoin de “vérifier” si c’est un numérique, que vous vouliez l’utiliser ou non.
Si vous avez besoin de le convertir, vous pouvez utiliser tous les parsingurs Integer.parseInt(Ssortingng)
pour BigDecimal(Ssortingng)
Si vous avez juste besoin de vérifier que le contenu peut être vu sous forme numérique, vous pouvez vous en tirer avec des expressions régulières.
Et n’utilisez pas parseInt si votre chaîne peut contenir un float.
En option, vous pouvez également utiliser une expression régulière.
if (theSsortingng.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+"))) return true; return false;
Avez-vous essayé Integer.parseInt ()? (Je ne suis pas sûr du nom de la méthode, mais la classe Integer a une méthode qui crée un object Integer à partir de chaînes). Ou, si vous devez gérer des nombres non entiers, des méthodes similaires sont également disponibles pour les objects Double. Si ceux-ci échouent, une exception est levée.
Si vous avez besoin d’parsingr de très grands nombres (plus grands que int / double), et que vous n’avez pas besoin de la valeur exacte, une simple méthode basée sur les regex pourrait suffire.
Dans un langage fortement typé, une méthode générique isNumeric (Ssortingng num) n’est pas très utile. 13214384348934918434441 est numérique, mais ne convient pas à la plupart des types. Beaucoup de ceux où cela convient ne renverront pas la même valeur.
Comme l’a noté Colin, il est déconseillé de numéroter des chaînes dans l’application. La fonction isNumberic ne devrait s’appliquer qu’aux données d’entrée sur les méthodes d’interface. Celles-ci devraient avoir une définition plus précise que isNumeric. D’autres ont fourni diverses solutions. Les expressions régulières peuvent être utilisées pour tester plusieurs conditions à la fois, y compris la longueur de la chaîne.
Il suffit d’utiliser if ((x instanceof Number)
// si on vérifie aussi le nombre d’parsings
|| (x instanceof Ssortingng && x.matches (“((- | \ +)? [0-9] + (\. [0-9] +)?) +”)
) {…}
// — Tous les types numériques, y compris BigDecimal extend Number