48 votes

Vérifier si une chaîne contient une valeur numérique en Java

Comment puis-je écrire une méthode pour savoir si une chaîne donnée contient un nombre ? La méthode doit retourner true si la chaîne contient un nombre et false dans le cas contraire.

83voto

Shef Points 21595
if(str.matches(".*\\d.*")){
   // contains a number
} else{
   // does not contain a number
}

Solution suggérée précédente, qui ne fonctionne pas, mais ramenée à cause de la demande/suggestion de @Eng.Fouad.

Ne fonctionne pas solution suggérée

 String strWithNumber = "This string has a 1 number";
String strWithoutNumber = "This string does not have a number";

System.out.println(strWithNumber.contains("\d"));
System.out.println(strWithoutNumber.contains("\d"));

Solution de travail

 String strWithNumber = "This string has a 1 number";
if(strWithNumber.matches(".*\\d.*")){
    System.out.println("'"+strWithNumber+"' contains digit");
} else{
    System.out.println("'"+strWithNumber+"' does not contain a digit");
}

String strWithoutNumber = "This string does not have a number";
if(strWithoutNumber.matches(".*\\d.*")){
    System.out.println("'"+strWithoutNumber+"' contains digit");
} else{
    System.out.println("'"+strWithoutNumber+"' does not contain a digit");
}

Sortir

 'This string has a 1 number' contains digit
'This string does not have a number' does not contain a digit

30voto

mre Points 21051

Utilisation d'une boucle -

 public static boolean containsDigit(final String aString)
{
    if (aString != null && !aString.isEmpty())
    {
        for (char c : aString.toCharArray())
        {
            if (Character.isDigit(c))
            {
                return true;
            }
        }
    }

    return false;
}

Utilisation d'un flux -

 public static boolean containsDigit(final String aString)
{
    return aString != null && !aString.isEmpty() &&
            aString.chars().anyMatch(Character::isDigit);
}

6voto

alexcoco Points 2747

La réponse de Shef ne compile pas pour moi. Il semble qu'il utilise RegEx dans String.contains() . Si vous souhaitez utiliser RegEx, utilisez ceci :

 String strWithNumber = "This string has a 1 number";
String strWithoutNumber = "This string has a number";

System.out.println(strWithNumber.matches(".*\\d.*"));
System.out.println(strWithoutNumber.matches(".*\\d.*"));

3voto

talnicolas Points 6925

Vous pouvez utiliser une expression régulière pour savoir si la chaîne contient un nombre. Jetez un œil à la méthode matches()

3voto

Kaj Points 6802

On dirait que les gens aiment faire du nourrissage à la cuillère, j'ai donc décidé de publier la pire solution pour une tâche facile :

 public static boolean isNumber(String s) throws Exception {
    boolean result = false;
    byte[] bytes = s.getBytes("ASCII");
    int tmp, i = bytes.length;
    while (i >0  && (result = ((tmp = bytes[--i] - '0') >= 0) && tmp <= 9));
    return result;
}

À propos du pire code que je puisse imaginer, mais il pourrait y avoir d'autres personnes ici qui peuvent proposer des solutions encore pires.

Hm, containsNumber est pire :

 public static boolean containsNumber(String s) throws Exception {
    boolean result = false;
    byte[] bytes = s.getBytes("ASCII");
    int tmp, i = bytes.length;
    while (i >0  && (true | (result |= ((tmp = bytes[--i] - '0') >= 0) && tmp <= 9)));
    return result;
}

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