Cela se fait généralement à l'aide d'une simple fonction définie par l'utilisateur (par exemple, la fonction "isNumeric" de Roll-your-own).
Quelque chose comme :
public static boolean isNumeric(String str) {
try {
Double.parseDouble(str);
return true;
} catch(NumberFormatException e){
return false;
}
}
Cependant, si vous appelez souvent cette fonction et que vous vous attendez à ce que de nombreuses vérifications échouent parce qu'il ne s'agit pas d'un nombre, les performances de ce mécanisme ne seront pas excellentes, puisque vous comptez sur la levée d'exceptions pour chaque échec, ce qui est une opération assez coûteuse.
Une autre approche peut consister à utiliser une expression régulière pour vérifier la validité d'un nombre :
public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}
Soyez prudent avec le mécanisme RegEx ci-dessus, car il échouera si vous utilisez des chiffres non arabes (c'est-à-dire des chiffres autres que 0 à 9). Cela est dû au fait que la balise " \d La partie "RegEx" ne correspondra qu'à [0-9] et ne tient pas compte de la dimension numérique internationale. (Merci à OregonGhost de nous l'avoir signalé !)
Une autre alternative consiste à utiliser l'objet java.text.NumberFormat intégré à Java pour voir si, après l'analyse de la chaîne, la position de l'analyseur se trouve à la fin de la chaîne. Si c'est le cas, nous pouvons supposer que la chaîne entière est numérique :
public static boolean isNumeric(String str) {
ParsePosition pos = new ParsePosition(0);
NumberFormat.getInstance().parse(str, pos);
return str.length() == pos.getIndex();
}
42 votes
Toutes les solutions proposées avec les expresions régulières ne fonctionneront pas pour les nombres hexadécimaux.
0 votes
Et le passage d'une chaîne de caractères nulle dans la fonction matches(...) provoquera une exception NullPointer.
0 votes
Voir la réponse de Max Malysh pour une solution Java 8 concise sans bibliothèques tierces.
0 votes
@HiteshSahu Les chaînes nulles semblent être traitées de manière élégante dans les dernières versions (y compris Java 6.x et 7.x).
0 votes
Toutes les solutions proposées utilisent
Integer.parseInt()
ne pourra pas analyser les numéros de téléphone mobile avecNumberFormatException
.0 votes
@OscarCastiblanco Tous Les chaînes de caractères sont des nombres dans une base donnée.