258 votes

Java String - Voir si une chaîne ne contient que des chiffres et pas de lettres

J'ai une chaîne de caractères que je charge dans toute mon application et qui passe des chiffres aux lettres, etc. J'ai un simple if pour voir si elle contient des lettres ou des chiffres, mais quelque chose ne fonctionne pas correctement. Voici un extrait.

String text = "abc"; 
String number; 

if (text.contains("[a-zA-Z]+") == false && text.length() > 2) {
    number = text; 
}

Bien que le text contient des lettres, la condition est retournée comme true . Le et && devrait être évaluée comme les deux conditions devant être true afin de traiter le number = text;

\==============================

Solution :

J'ai pu résoudre ce problème en utilisant le code suivant fourni par un commentaire sur cette question. Tous les autres messages sont également valables !

Ce que j'ai utilisé et qui a fonctionné vient du premier commentaire. Bien que tous les exemples de codes fournis semblent également valables !

String text = "abc"; 
String number; 

if (Pattern.matches("[a-zA-Z]+", text) == false && text.length() > 2) {
    number = text; 
}

5 votes

Contains ne prend pas une regexp en entrée. Utilisez soit matches("\\d{2,}") ou essayez avec un Pattern y Matcher

0 votes

La chaîne peut-elle avoir une valeur décimale ou seulement des valeurs entières ?

5 votes

Pourquoi vérifiez-vous que text.length() > 2 ? Quelle en est la raison ?

9voto

Abdull Points 1666

Langage Apache Commons fournit org.apache.commons.lang.StringUtils.isNumeric(CharSequence cs) qui prend comme argument un String et vérifie s'il est composé de caractères purement numériques (y compris les nombres provenant d'écritures non latines). Cette méthode renvoie false s'il y a des caractères tels que l'espace, le moins, le plus, et des séparateurs décimaux tels que la virgule et le point.

D'autres méthodes de cette classe permettent des contrôles numériques supplémentaires.

4voto

Andy Points 149

Boolean isNum = text.chars().allMatch(c -> c >= 48 && c <= 57)

2 votes

Pour réduire les chiffres magiques, vous pourriez comparer comme suit : boolean isNum = text.chars().allMatch(c -> c >= '0' && c <= '9')

4voto

Les regexs ci-dessous peuvent être utilisées pour vérifier si une chaîne de caractères ne contient que des chiffres ou non :

if (str.matches(".*[^0-9].*")) or if (str.matches(".*\\D.*"))

Les deux conditions ci-dessus renverront true si la chaîne ne contient pas de nombres. Sur false La chaîne de caractères ne contient que des chiffres.

3voto

Vous pouvez utiliser Regex.Match

if(text.matches("\\d*")&& text.length() > 2){
    System.out.println("number");
}

Ou vous pouvez utiliser des onversions comme Integer.parseInt(String) ou mieux Long.parseLong(String) pour les grands nombres comme par exemple :

private boolean onlyContainsNumbers(String text) {
    try {
        Long.parseLong(text);
        return true;
    } catch (NumberFormatException ex) {
        return false;
    }
} 

Et ensuite tester avec :

if (onlyContainsNumbers(text) && text.length() > 2) {
    // do Stuff
}

0 votes

.matches("^ \\d +$")

2voto

Usman Javaid Points 37
import java.util.*;

class Class1 {
    public static void main(String[] argh) {
        boolean ans = CheckNumbers("123");
        if (ans == true) {
            System.out.println("String contains numbers only");
        } else {
            System.out.println("String contains other values as well");

        }
    }

    public static boolean CheckNumbers(String input) {
        for (int ctr = 0; ctr < input.length(); ctr++) {
            if ("1234567890".contains(Character.valueOf(input.charAt(ctr)).toString())) {
                continue;
            } else {
                return false;
            }
        }
        return true;
    }
}

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