Valider la chaîne de caractères avant le parsing
Dans l'étape précédente, nous avons appris à capturer une NumberFormatException
lorsque Integer.parseInt()
échoue. Bien que la capture d'exceptions soit importante pour gérer les erreurs, il est souvent préférable d'empêcher l'erreur de se produire dès le départ.
Dans cette étape, nous allons apprendre à valider une chaîne de caractères avant de tenter de la parser en tant qu'entier. Cela consiste à vérifier si la chaîne de caractères ne contient que des chiffres.
Une façon de faire cela est d'itérer sur chaque caractère de la chaîne de caractères et de vérifier s'il s'agit d'un chiffre. Une autre approche courante consiste à utiliser des expressions régulières, mais pour les débutants, une simple boucle est plus facile à comprendre.
Modifions à nouveau notre programme StringToInt.java
pour inclure une vérification de validation.
-
Ouvrez le fichier StringToInt.java
dans l'éditeur WebIDE.
-
Remplacez le code existant par le suivant :
public class StringToInt {
public static void main(String[] args) {
String numberString = "123a"; // This string contains a non-digit character
if (isValidInteger(numberString)) {
int numberInt = Integer.parseInt(numberString);
System.out.println("The string is: " + numberString);
System.out.println("The integer is: " + numberInt);
} else {
System.out.println("Error: The string '" + numberString + "' is not a valid integer.");
}
}
// Method to check if a string is a valid integer
public static boolean isValidInteger(String str) {
if (str == null || str.isEmpty()) {
return false; // An empty or null string is not a valid integer
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (i == 0 && (c == '-' || c == '+')) {
// Allow a leading sign (+ or -)
continue;
}
if (!Character.isDigit(c)) {
return false; // Found a non-digit character
}
}
return true; // All characters are digits (or a leading sign)
}
}
Examinons les modifications :
- Nous avons ajouté une nouvelle méthode appelée
isValidInteger(String str)
. Cette méthode prend une chaîne de caractères en entrée et renvoie true
si la chaîne de caractères représente un entier valide, et false
sinon.
- À l'intérieur de
isValidInteger
, nous vérifions d'abord si la chaîne de caractères est nulle ou vide.
- Nous parcourons ensuite chaque caractère de la chaîne de caractères.
Character.isDigit(c)
est une méthode intégrée de Java qui vérifie si un caractère est un chiffre.
- Nous avons ajouté une vérification pour autoriser un signe plus ou moins au début.
- Dans la méthode
main
, nous utilisons maintenant une instruction if-else
. Nous appelons isValidInteger()
pour vérifier la chaîne de caractères avant de tenter de la parser.
- Si
isValidInteger()
renvoie true
, nous procédons avec Integer.parseInt()
.
- Si elle renvoie
false
, nous affichons un message d'erreur sans tenter de parser, évitant ainsi la NumberFormatException
.
-
Enregistrez le fichier (Ctrl+S ou Cmd+S).
-
Compilez le programme modifié dans le Terminal :
javac StringToInt.java
-
Exécutez le programme compilé :
java StringToInt
Étant donné que la chaîne de caractères "123a"
contient un caractère qui n'est pas un chiffre, la méthode isValidInteger
renverra false
, et vous devriez voir la sortie suivante :
Error: The string '123a' is not a valid integer.
Maintenant, changeons la chaîne de caractères en un entier valide pour voir l'autre branche de l'instruction if-else
.
-
Changez la variable numberString
en "456"
dans le fichier StringToInt.java
:
String numberString = "456";
-
Enregistrez le fichier.
-
Compilez et exécutez le programme à nouveau :
javac StringToInt.java
java StringToInt
Cette fois-ci, isValidInteger
renverra true
, et vous devriez voir :
The string is: 456
The integer is: 456
En validant la chaîne de caractères avant le parsing, nous pouvons gérer les entrées invalides de manière plus élégante et éviter les erreurs d'exécution telles que la NumberFormatException
. C'est une bonne pratique pour écrire un code plus robuste et fiable.