2009-07-10 6 views
40

J'ai une chaîne qui contient un caractère alphanumérique.Comment vérifier une chaîne commence par un numéro numérique?

Je dois vérifier si la chaîne est démarrée avec un numéro.

Merci,

+1

hmmm, pouvez-vous être plus précis? Les réponses sont principalement juste en vérifiant le premier caractère. Quels types de nombres voulez-vous? Ces réponses ne fonctionneront pas pour les nombres négatifs! aussi, que veux-tu après le numéro ... n'importe quoi? – Tom

+0

Oui ... vouliez-vous dire "nombre" ou "chiffre" ... maintenant je suis confus ... tout le monde semblait penser que nombre signifiait chiffre ...:: sigh :: – Tom

+0

C'est un bon point. Je pensais qu'il voulait dire chiffre. S'il voulait dire nombre, alors vous voudrez certainement regex. –

Répondre

-2

Utilisez une expression régulière comme ^\d

68

Voir la méthode isDigit(char ch):

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character.html

et passer au premier caractère de la chaîne en utilisant la méthode String.charAt().

Character.isDigit(myString.charAt(0)); 
+7

Juste pour être complet: isDigit renvoie vrai non seulement 0..9 mais aussi d'autres chiffres (par exemple arabes): http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character .html # isDigit (char) –

+0

comme le font la plupart des méthodes nommées isXXX(). Je pense que c'est implicite dans le nom de la méthode et peut être trouvé en regardant le lien vers la méthode que j'ai fourni ... – Jon

+0

@Csaba_H - FYI: 0-9 sont des chiffres arabes - mais je comprends votre point. – McDowell

1
System.out.println(Character.isDigit(mystring.charAt(0)); 

EDIT: Je recherche pour docs java, regardé les méthodes de la classe de chaîne qui peut me faire 1er caractère & regardé des méthodes sur la classe de caractères pour voir si elle a une méthode pour vérifier une telle chose. Je pense que vous pourriez faire la même chose avant de le demander. EDI2: Ce que je veux dire, c'est essayer, lire/trouver & si vous ne trouvez rien - demandez.
J'ai fait une erreur en la publiant pour la première fois. isDigit est une méthode statique sur la classe Character.

+0

Bonne suggestion. +1 pour ça. –

15

Désolé, je n'ai pas vu votre tag Java, lisait seulement la question. Je laisserai mes autres réponses ici depuis que je les ai dactylographiées.

Java

String myString = "9Hello World!"; 
if (Character.isDigit(myString.charAt(0))) 
{ 
    System.out.println("String begins with a digit"); 
} 

C++:

string myString = "2Hello World!"; 

if (isdigit(myString[0])) 
{ 
    printf("String begins with a digit"); 
} 

Expression régulière:

\b[0-9] 

Une preuve de mon travail regex: Sauf si mes données de test sont erronées? alt text http://i29.tinypic.com/15z5pw8.png

+0

Brock: OP a ajouté java tag (non spécifié dans la question). – shahkalpesh

+0

Peut-être que maintenant que j'ai corrigé ma réponse, la personne qui m'a votée reviendra? –

+1

Je crois que regex est faux. Pas pour les raisons que j'ai mises dans ma réponse (parce que je ne suis pas sûr d'avoir raison, parce que cela dépend de ce que l'OP voulait ... il a besoin de clarifier), mais à cause du \ b. \ b est une limite de mot. Vous voulez forcer le chiffre au début de la chaîne, vous devez donc utiliser ^. – Tom

5

Cela devrait fonctionner:

String s = "123foo"; 
Character.isDigit(s.charAt(0)); 
10

Je pense que vous devriez utiliser une expression régulière:


import java.util.regex.*; 

public class Test { 
    public static void main(String[] args) { 
    String neg = "-123abc"; 
    String pos = "123abc"; 
    String non = "abc123"; 
     /* I'm not sure if this regex is too verbose, but it should be 
     * clear. It checks that the string starts with either a series 
     * of one or more digits... OR a negative sign followed by 1 or 
     * more digits. Anything can follow the digits. Update as you need 
     * for things that should not follow the digits or for floating 
     * point numbers. 
     */ 
    Pattern pattern = Pattern.compile("^(\\d+.*|-\\d+.*)"); 
    Matcher matcher = pattern.matcher(neg); 
    if(matcher.matches()) { 
     System.out.println("matches negative number"); 
    } 
    matcher = pattern.matcher(pos); 
    if (matcher.matches()) { 
     System.out.println("positive matches"); 
    } 
    matcher = pattern.matcher(non); 
    if (!matcher.matches()) { 
     System.out.println("letters don't match :-)!!!"); 
    } 
    } 
} 

Vous pouvez régler cela à accepter des nombres à virgule flottante, mais cela fonctionnera pour négatifs. Les autres réponses ne fonctionneront pas pour les négatifs car ils ne vérifient que le premier caractère! Soyez plus précis sur vos besoins et je peux vous aider à ajuster cette approche.

+0

http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html – Johan

+5

C'est une solution terriblement complexe pour "est le premier caractère un chiffre" – skaffman

+0

+1 une question était ambigu et n'a pas précisé "est le premier caractère un chiffre" – Pablojim

Questions connexes