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 unPattern
yMatcher
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 ?
1 votes
@RedHatcc
Pattern.matches("[a-zA-Z]+", text) == false
peut être simplifié en!Pattern.matches("[a-zA-Z]+", text)
7 votes
Utilisation de l'API de streaming java
boolean isNumeric = someString.chars().allMatch(x -> Character.isDigit(x));
formulaireMax Malysh
Poste.0 votes
Cette regex négative me semble la plus simple :
! oddStr.matches("\\D+")