← (précédent) B.2 Quelques mini-projets
B.4 Correction : Prose de M. JOURDAIN Adresse
Accueil S O M M A I R E

B.3 Correction : Adresse e-mail valide

Il y a toujours plus d'une façon de résoudre un problème. Les solutions proposées ici tiennent compte du caractère débutant des auditeurs. Donc, mes solutions seront toujours plus longues que celles d'un AS de la programmation.

NB : Créer une méthode c'est bien. Mais si elle est déjà prédéfinie par le langage, c'est nul.
Vous ne ferez jamais mieux que les créateurs de Java

Mini-projet 1 : Adresse e-mail valide

Ecrire un programme qui demande à l'utilisateur de saisir une adresse e-mail. Puis le programme affiche un message lui informant si l'adresse est valide ou non.
La question qui se pose dans ce projet est de savoir ce qu'est une adresse e-mail valide.

Une bonne adresse, selon le sens commun, contient le caractère arobase ( @ ) et le caractère point : ( . )

Mais une adresse e-mail, au sens le plus général ne contient pas forcément le caractère @. Alors, pour ce mini-projet, nous allons nous doter d'une définition de ce qu'est une adresse e-mail valide. Même si ce n'est pas la stricte vérité. C'est juste histoire de se donner une référence à respecter, nous permettant ainsi d'utiliser nos connaissances acquises jusqu'ici.

  • Le premier caractère n'est pas un chiffre
  • Un seul caractère arobase ( @ )
  • Au minimum 3 caractères avant le caractère @
  • Aucun caractère espace
  • Un seul caractère point ( . )
  • Au moins 3 caractères avant le caractère point.
  • Au moins 2 caractères après le caractère point
  • Le caractère point se trouve après le caractère @


Pistes : un certain nombre de méthodes de la classe String.
Correction du mini-projet 1

1.     public class MiniProjet1
2.     {
2.          public static void main (String [] args)
4.          {
5.               System.out.println("Entrez une adresse e-mail");
6.               String adresse = Lire.chaine();
7.               adresse = adresse.trim();
8.               char premCar = adresse.charAt(0);
9.               String note = new String("adresse e-mail non valide : ");
10.              
11.              if(adresse.length() < 10)
12.              {
13.                   System.out.println(note + "Nombre de caracteres inferieur à 10");
14.                   System.exit(0);
15.              }
16.             
17.              if (estUnChiffre(premCar) )
18.              {
19.                   System.out.println(note + "Elle commence par un chiffre ");
20.                   System.exit(0);
21.              }
22.              
23.              if(nombreDeCarDansChaine('@', adresse) != 1)
24.              {
25.                   System.out.println(note + "Le nombre de '@' différent de 1 ");
26.                   System.exit(0);
27.              }
28.              
29.              if(adresse.indexOf('@') < 3 )
30.              {
31.                   System.out.println(note + "Il y a moins de 3 caracteres avant @");
32.                   System.exit(0);
33.              }
34.            
36.              if(nombreDeCarDansChaine('.', adresse) != 1)
37.              {
38.                   System.out.println(note + "Le nombre de '.' est different de 1");
39.                   System.exit(0);
40.              }
41.              
42.              if(adresse.indexOf('.') < 7 )
43.              {	
44.                   System.out.println(note + "moins de 7 caracteres avant le point (.) ");
45.                   System.exit(0);
46.              }
47.              
48.         }
49.               
50.         public static boolean estUnChiffre(char c)
51.         {
52.              boolean verite = false;
53.              int ascii = (int)(c);
54.              
55.              if (ascii >= 48 && ascii <= 57)
56.              {
57.                   verite = true;
58.              }
59.              return verite;
60.        }
61.            
62.             public static int nombreDeCarDansChaine(char c, String chaine)
63.             {
64.                  int compteur = 0; 
65.             
66.                  for(int i = 0; i < chaine.length(); i++)
67.                  {
68.                       if(chaine.charAt(i) == c)
69.                       {
70.                            compteur++;
71.                       }
72.                  }
73.                  return compteur;
74.            }
75.         
76.    }       
	
Il s'agit de respecter les consignes de l'énoncé. Moi en tant que programmeur, je me pose laquestion de savoir comment faire pour les respecter.

Comment faire pour m'assurer que le premier caractère d'une adresse e-mail (chaine de caractères) est un chiffre ?
Il y a plusieurs pistes. La méthode isNaN() se trouve dans un certain nombre de classes prédéfinies. Mais il faut d'abord transformer une variable de type primitif en variable objet. Nous n'en sommes pas encore là. isNaN (is Not a Number ) permet de montrer une valeur n'est pas un nombre. Voir par exemple dans les classes Double et Float (double et float tout en miniscule = type primitif. Alors que Double et Float premières lettres majuscules sont des classes. Vous aurez l'occasion de les comprendre en évoluant en Java.

Revenons à notre mini-projet :

Ligne 6 : vous permet de saisir une adresse grâce à la méthode chaine() de la classe Lire. Vous le savez déjà. Cette saisie est affectée à la variable adresse. La ligne 7 permet de supprimer les caractères espace qu'on peut éventuellement trouver en début et en fin de saisie. Ligne 8 : Je crée une variable premCar à qui j'affecte comme valeur, le premier caractère de adresse (adresse e-mail saisie).

Entre ligne 11 et ligne 15, je dis que si le nombre de caractères de l'adresse saisie est inférieur à 10, alors l'adresse e-mail est non valide. Pourquoi ?
C'est l'une des conséquences des consignes. 3 caractères avant @ --> 4 caractères. Ensuite, 3 caractères avant le point (;) --> + 4 autres caractères. Et enfin 2 caractères après le point. total = 10 caractères au moins dans votre adresse e-mail.
En ligne 14, l'instruction System.exit(0); veut dire que le programme java doit prendre fin. Donc, la suite ne sert plus à rien. Normal : à partir du moment qu'un seule condition n'est pas vérifiée, l'adresse e-mail est forcément non valide. Pas besoin de tester autre chose.

J'utilise donc cette méthode en ligne 17 en l'appliquant à l'argument premCar qui n'est autre que le premier caractère de l'adresse e-mail. Cette ligne 17 aurait pu s'écrire autrement.
Ainsi : if( estUnChiffre(premCar) == true).
Mais en java, lorsque la condition booleenne a pour valeur true, on peut supprimer == true
Et si la condition booléenne a pour valeur false (if ( estUnChiffre(premCar) == false)), on peut aussi supprimer == false. Mais dans ce cas, on ajoute le caractère ! au début de la condition. Ainsi :
if ( estUnChiffre(premCar) == false) est équivalent à if ( !estUnChiffre(premCar))

Alors, je dis en ligne 17 que si le premier caractère de adresse est un chiffre, alors, afficher le message d'erreur, puis sortir du programme.

Entre les ligne 47 et 57, j'ai défini une méthode appelée estUnChiffre(char c) qui requiert un argument de type char. Elle est de type booléan. Autrement dit, elle retourne true ou false. true si le caractère est un chiffre et false dans le cas contraire.
Je crée donc une variable de type booléenne (ligne 49) que j'initialise à false. Pas une obligation, car ça aurait pu être true. Ensuite, je cherche le code ascii du caractère c. On l'obtient en faisant une conversion explicite du type char en type int (ici : (int)c ). Ce code est affecté à la variable ascii. Puis je cherche à savoir si ce code est compris entre 48 et 57. Parce que le code ascii des chiffres (de 0 à 9) est dans cet intervalle.
(48 pour 0 - 49 pour 1 - 50 pour 2 - ...... et enfin 57 pour 9). Dans ce cas, le caractère est un chiffre. Donc verite = true. Enfin, je retourne la variable boolenne verite.

Entre les lignes 23 et 27, de même entre les lignes 34 et 38, j'appelle la méthode nombreDeCarDansChaine(char c, String chaine) créée entre les lignes 59 et 71.
Cette méthode requiert 2 arguments qui sont : une variable de type char et une de type String. Puis la méthode retourne le nombre de fois où l'on trouve le caractère dans la chaine de caractères.
J'applique cette méthode d'une part au caractère @ et l'adresse e-mail saisie (début ligne 23) et d'autre part au caractère . et l'adresse e-mail saisie (début ligne 34) en disant dans chaque cas, que si le nombre de fois où l'on trouve ce caractère est !différent de 1, alors, affiche du message d'erreur. Puis naturellement, sortie du programme. Pourquoi cette méthode ?
parce que les conditions de validité de l'adresse e-mail, telles définies dans l'énoncé, stipulent une seule fois ces 2 caractères.

Entre les lignes 29 et 32 d'une part, de même entre les lignes 42 et 43 d'autre part, je teste la position des caractères @ et . dans l'adresse. Le caractère @ doit se trouver à à partir de la position 3. Et pas avant. Pourquoi ? ... D'après l'énoncé, 3 caractères avant @. Ces 3 caractères seront en position zéro, 1 et 2. Donc si indefOf('@', adresse) est inférieur à 3, forcément l'adresse e-mail n'est plus valide.
Même raisonnement avec le caractère point (.).

Pour terminer, je vous dirais qu'il y a mieux comme solution. Moi je m'adresse aux débutants. L'important, c'est déjà d'y arriver. Savoir utiliser les méthodes prédéfinies et savoir créer ses propres méthodes, voilà ce qui doit dominer l'esprit de tout programmeur. C'était l'essentiel dans cette correction.

Une dernière info : savoir si un caractère est un chiffre peut se faire aussi par la méthode isDigit() de la classe Character.

Utilisation : dans la fonction main, vous mettez ceci,
System.out.print("Entrez un caractere : " );
char c = Lire.caractere();
System.out.println();

if( Character.isDigit(c) )
{
     System.out.println(c + " est  un chiffre.");
}
else
{
     System.out.println(c + "  n est pas un chiffre.");
}

Compilez puis exécutez, vous verrez affiché le message adéquat.

La connaissance, c'est bien. La partager, c'est mieux
Conseiller ce site à un(e) ami(e):

Son e-mail est :       
Une suggestion à faire pour ce site ? ... Contact : webmaster@debutantprog.com
← (précédent) B.2 Quelques mini-projets
B.4 Correction : Prose de M. JOURDAIN Adresse
Accueil S O M M A I R E

B.3 Correction : Adresse e-mail valide