73 votes

Java: comment vérifier qu'une chaîne est analysable en double?

Existe-t-il un moyen natif (de préférence sans implémenter votre propre méthode) de vérifier qu'une chaîne est analysable avec Double.parseDouble() ?

64voto

bluedevil2k Points 1967

Apache, comme d'habitude, a une bonne réponse

 NumberUtils.isNumber(string);
 

Gère les valeurs NULL, pas de bloc try / catch. C'est dans le paquet Lang je crois.

61voto

jdc0589 Points 3385

Vous pouvez toujours envelopper Double.parseDouble () dans un bloc catch catch.

 try
{
  Double.parseDouble(number);
}
catch(NumberFormatException e)
{
  //not a double
}
 

51voto

Johannes Wachter Points 1664

L'approche habituelle serait de le vérifier avec une expression régulière, comme cela est également suggéré dans la documentation Double .

L'expression rationnelle fournie devrait couvrir tous les cas valides en virgule flottante, de sorte que vous n'avez pas besoin de le tripoter car vous risquez de manquer certains points plus fins.

Si vous ne voulez pas faire cela, try catch est toujours une option.

11voto

CoolBeans Points 11615

Quelque chose comme ci-dessous devrait suffire: -

 String decimalPattern = "([0-9]*)\\.([0-9]*)";  
String number="20.00";  
boolean match = Pattern.matches(decimalPattern, number);
System.out.println(match); //if true then decimal else not  
 

8voto

Joe.M Points 346

Toutes les réponses sont OK, selon votre niveau académique. Si vous souhaitez suivre les spécifications Java avec précision, utilisez les éléments suivants:

 private static final Pattern DOUBLE_PATTERN = Pattern.compile(
    "[\\x00-\\x20]*[+-]?(NaN|Infinity|((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)" +
    "([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|" +
    "(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))" +
    "[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*");

public static boolean isFloat(String s)
{
    return DOUBLE_PATTERN.matcher(s).matches();
}
 

Ce code est basé sur JavaDocs chez Double .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X