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.
Réponses
Trop de publicités?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
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);
}
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.*"));
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;
}