En Java, existe-t-il un moyen de savoir si le premier caractère d'une chaîne est un nombre?
Une façon est
string.startsWith("1")
et faites ce qui précède jusqu'à 9 heures, mais cela semble très inefficace.
En Java, existe-t-il un moyen de savoir si le premier caractère d'une chaîne est un nombre?
Une façon est
string.startsWith("1")
et faites ce qui précède jusqu'à 9 heures, mais cela semble très inefficace.
Réponses:
Character.isDigit(string.charAt(0))
Notez que cela autorisera n'importe quel chiffre Unicode , pas seulement 0-9. Vous pourriez préférer:
char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');
Ou les solutions regex plus lentes:
s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")
Cependant, avec l'une de ces méthodes, vous devez d'abord vous assurer que la chaîne n'est pas vide. Si c'est le cas, charAt(0)et substring(0, 1)lancera un fichier StringIndexOutOfBoundsException. startsWithn'a pas ce problème.
Pour rendre la condition entière une ligne et éviter les vérifications de longueur, vous pouvez modifier les expressions régulières comme suit:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
Si la condition n'apparaît pas dans une boucle serrée dans votre programme, le petit impact sur les performances lié à l'utilisation d'expressions régulières ne sera probablement pas perceptible.
((null!=s) && Character.isDigit(s.charAt(0)) )), soit utiliser des astuces commeCharacter.isDigit((s?s:"X").charAt(0))
Les expressions régulières sont un outil très puissant mais coûteux. Il est valide de les utiliser pour vérifier si le premier caractère est un chiffre mais ce n'est pas si élégant :) Je préfère cette façon:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
functionn'est pas Java. 2) Cela n'autorise que les chiffres arabes, pas le chinois, l'indien, etc. C'est peut-être ce que vous préférez, mais ce n'est pas spécifié dans la question. 3) J'ai déjà couvert cette solution exacte dans ma réponse il y a quatre ans.
regular expression starts with number->'^[0-9]'
Pattern pattern = Pattern.compile('^[0-9]');
Matcher matcher = pattern.matcher(String);
if(matcher.find()){
System.out.println("true");
}
{1,1}suffixe, ce qui signifie que "le motif précédent doit apparaître entre 1 et 1 fois". Cela signifie exactement la même chose que le modèle seul.
Je viens de tomber sur cette question et j'ai pensé à contribuer avec une solution qui n'utilise pas de regex.
Dans mon cas, j'utilise une méthode d'aide:
public boolean notNumber(String input){
boolean notNumber = false;
try {
// must not start with a number
@SuppressWarnings("unused")
double checker = Double.valueOf(input.substring(0,1));
}
catch (Exception e) {
notNumber = true;
}
return notNumber;
}
Probablement une exagération, mais j'essaie d'éviter les regex chaque fois que je le peux.