C-SHARP - 4.7 String Avancée
Bonjour a tous et bienvenue dans cette nouvelle video. Nous allons maintenant passer a la pratique de la theorie qu on a vu dans la video precedente. Dans un premier temps, on a vu la methode ToLower(), ToUpper et Trim(). Je vais donc ici creer une chaine. Je fais string chaine = guillemets et je tape Hello World. Ensuite, je vais faire un Console.WriteLine de ma chaine. Ok maintenant, on va appliquer nos methodes sur cette chaine. Pour cela, je vais faire plusieurs Console.WriteLine avec notre chaine qui pointe vers chaque methode, le premi re ToLower deux points et j ajoute la variable avec la methode, pour la deuxi me pareil ToUpper() deux points variable point la methode et la 3 me Trim() aussi. Ok, je vais juste ajouter des espaces ici pour qu on voit ce que la methode Trim va effectuer. Et la, je vais rajouter un petit avant pour afficher la chaine originale. Je lance le programme. Et vous voyez, ici on a notre chaine originale. A la deuxi me ligne, on a une copie de notre chaine en minuscule gr ce a la methode ToLower(). Ensuite ici, on a notre chaine en majuscule gr ce a la methode ToUpper() et pour terminer ici, on voit bien que les espaces qui etaient au debut, on etait retire gr ce a la methode Trim. Je precise encore que la methode Trim retire les espaces qu en debut et fin de chaine. Ici au milieu, elle ne s en preoccupe pas. Passons a la suite, je vais ajouter un Console.WriteLine() pour sauter une ligne en console et je vais une ligne de commentaire pour separer notre code. Dans un second temps, on a vu qu on pouvait si on le souhaiter, rechercher un caract re ou un mot dans une chaine avec la methode Indexof ou Lastindexof pour commencer notre recherche par la fin. Je vais creer une nouvelle chaine, je vais string s = par exemple Je vais partir a la salle de sport Ok maintenant, si j ai envie de recuperer l index du mot salle comment je vais faire ? Ici je vais directement l afficher avec Console.WriteLine() mais il est tout a fait possible de stocker dans une variable ce que je vais mettre dans les parenth ses. Donc ici je vais donner ma chaine ensuite j appelle la methode indexof et je mets comme param tre le mot salle entre guillemets. Si je lance mon programme, il me retourne l index, l emplacement de la premi re lettre de mon mot. Imaginons maintenant, je tape un mot qui ne se trouve pas dans ma chaine, je mets ici par exemple moto. Je relance le programme, eh bien la il nous retourne -1 car il n a pas trouve le mot dans ma chaine. On peut m me faire mieux. Ici je vais faire une condition pour que lorsqu il ne trouve pas un mot dans la chaine, il m affiche Ce mot n est pas dans la chaine , c est deja plus comprehensible que le -1. Donc ici je fais un if je donne ma chaine pointant vers la methode indexof avec en param tre le mot que je cherche ici c est moto je vais juste creer une variable mot en rapide et lui affecte moto ensuite est == a -1 c est-a-dire qu il ne le trouve pas alors tu m affiches ce qu il y a dans le Console.WriteLine. Ici je fais un Console.WriteLine() Ce mot n est pas dans la chaine else qui traite les cas ou il trouve le caract re ou le mot donc j affiche Console.WriteLine Ce mot se trouve a l index deux point la chaine s.indexof() du mot. Ici on aurait pu mettre directement le mot entre guillemets mais il faut creer un programme reutilisable donc imaginez on change de mot, on doit le reecrire partout a chaque fois alors que la on a juste a la changer en haut et c est change partout automatiquement. Ou si on decide que c est maintenant l utilisateur qui tape le mot on aura juste a remplacer le mot ici par la fonction Console.ReadLine(). Je vais supprimer a et maintenant, si je lance le programme. Vous voyez, il ne me retourne plus -1 mais bien Ce mot n est pas dans la chaine . Et si je change, je mets un mot se trouvant dans la chaine. Je mets ici salle. Je relance le programme, il m affiche bien Ce mot se trouve a l index 21. Je vais mintenant ajouter a ma chaine ici et apr s je vais aller au cinema . J ai fait expr s d ajouter un je vais pour tester avec la fonction Lastindexof pour vous montrer qu il va me donner l index du 2 me Ici je vais faire un Console.WriteLine() je vais mettre L index est deux points s.Lastindexof() et en param tre je mets le mot vais. Je lance le programme et vous voyez il m a retourne l index de la premi re lettre du 2 me vais car il commence a chercher a partir de la fin. Le premier se situe a l index 3 tandis que le 2 me se situe a l index 47. Et comme je l ai precise dans la video precedente, on commence a chercher a partir de la fin. Cependant le syst me d index reste le m me. On donne l index a partir du debut mais on parcoure a partir de la fin. Ensuite, on a vue qu on pouvait creer une chaine a partir d une chaine donnee. C est-a-dire qu a partir de cette chaine par exemple contenu dans la variable s, on peut en copier un bout et le stocker dans une variable avec la methode Substring en donnant en param tre l emplacement de la o nous voulons commencer a copier. Ici par exemple j ai envie de copier a partir du et . Vous vous rappelez dans la video precedente, je vous avais de reflechir par rapport a a. Comment je pourrais faire pour copier a partir du et tout en sachant que je ne vais pas m amuser a compter les index un par un et surtout si on doit creer un programme reutilisable. Alors vous avez une idee ? Ne connaissons-nous pas une methode permettant de recuperer l index d un caract re ou d une chaine qu on lui passe en param tre ? Eh oui, vous avez devine, c est bien la methode indexof(). Ici on va mettre dans les parenth ses de notre methode Substring la methode indexof avec le mot a partir duquel nous voulons commencer car comme vous savez, la methode indexof retourne l index de la chaine qu on lui passe en param tre donc ici on va retourner dans les parenth ses un index et ensuite nous pouvons effectuer notre copie. Donc la je vais creer une variable copie qui va stocker la methode Substring qui prend en param tre la methode indexof qui retournera l index du mot. Ensuite je fais un Console.WriteLine() et a l interieur j y mets ma variable copie. Et si je lance le programme, on voit bien que le programme nous a retourner ce qu on voulais. La fonction indexof a capter l index du mot et ensuite l index a ete place en tant que param tre dans la methode substring et a creer la copie de la chaine qu on pointe a partir de celui-ci Ce qui nous donne la chaine suivante et je vais aller au cinema Autre chose, on avait dit que la methode Substring etait surcharge, c est-a-dire que dans la class System, il y a une 2 me methode du m me nom, cependant avec plus de param tre. La particularite c est qu elle permet de limiter la copie. Tandis que la premi re copie tout jusqu a la fin de la chaine. Je vais prendre la chaine qu on a copier et je vais la limiter en m arr tant avant cinema. Pour a, je vais faire un Console.WriteLine() pour faire a rapidement et afficher directement le resultat, a l interieur je lui donne copie pointant vers la methode Substring(). Le premier param tre c est la ou nous voulons commencer a copier. Moi, je veux commencer du debut donc je mets l index 0 et le deuxi me c est jusqu a ou je veux copier donc ici je veux copier jusqu a l espace qu il y avant cinema donc je fais quoi ici je fais parenth ses j y place copie pointant vers la fonction indexof a l interieur je mets le mot cinema Si maintenant je lance le programme, on a bien et je vais au qui s est affiche Ensuite, on avait qu il existe une methode qui permettait de changer un caract re ou une sous-chaine presente dans une chaine. Par exemple, j ai envie de changer tous les a dans une chaine par e ou sinon j ai la chaine Jason va a la salle de sport et j ai envie de changer le prenom Jason et le remplacer par Jibril. On a vu que c etait la methode Replace qui permettait de faire a. Je vais juste mettre quelque commentaires et quelques Console.WriteLine() pour sauter des lignes en console histoire que a soit plus lisible Je vais creer une variable tmp qui va stocker le mot aaaallllo avec plusieurs a et je vais creer une copie de cette chaine en remplacer tous les a par e. Comment je fais a, je vais faire un Console.WriteLine() a l interieur je donne ma chaine tmp pointant vers la methode Replace(). Elle prend en param tre 2 choses, le caract re ou le mot qu elle veut remplacer soit ici le a et le 2 me par quoi elle veut le remplacer soit e Donc maintenant je vais lancer le programme pour voir le resultat. Et la, on a bien tous nos a qui ont ete remplacer par des e. Je vais maintenant tester pour le 2 me exemple. Je change ma chaine ici hop : Jason va a la salle de sport. Ici l element que je veux changer c est Jason et par quoi je veux le remplacer, c est Jibril. Donc je relance le programme et on a bien remplacer Jason par Jibril. Tr s bien passons a la suite. On a vu dans la precedente video, deux methodes permettant de voir si une chaine est vide ou non, ainsi elle nous renvoie un booleen True ou False. True si elle est vide et False si elle ne l est pas. On avait dit que la difference entre les deux c est que la premiere String.IsNullOrEmpty, il fallait que a soit strictement vide. Tandis que la 2 me, String.IsNullOrWhiteSpace s il y a un espace mais rien d autre alors elle est consideree comme vide. Donc pour tester a, on va creer une variable vide et on va stocker un espace dedans. Ensuite on va faire Console.WriteLine() et a l interieur on va y mettre la methode String.IsNullOrEmpty. Et cette methode prend en param tre une chaine donc on va lui mettre la variable vide. Je lance le programme et vous voyez on a False qui nous est retourne car la chaine n est pas strictement vide elle contient un espace si maintenant je supprime cette espace et que je relance. Cette fois-ci, elle est strictement vide donc on a true qui nous est retourne. Maintenant je vais essayer avec l autre methode String.IsNullOrWhiteSpace, je remets l espace et je lance le programme. Hop, vous voyez on a true qui nous est retourne car elle consid re que la chaine est vide il n y a pas la condition de strictement, simplement le fait que les caract res sont absents. Tandis que la, si je mets un caract re apr s l espace. Je lance le programme et la vous voyez ? On a False car elle n est maintenant plus vide. Passons maintenant a la methode split qui permet de fractionner une chaine gr ce a un separateur. Et renvoie un tableau de string. Pour tester cette methode, on va reprendre la variable copie qui contient la chaine et je vais aller au cinema . Je vais creer une variable de type var qu on va appeler tab et on va lui affecter la variable copie pointant vers la methode split et ayant comme separateur un espace. Ici pourquoi j ai cree un variable var ? Parce que la methode split nous renvoie un tableau de string et lorsqu on met le type var elle deduit le type en fonction de ce qu on lui affecte. Et si on regarde ici on voit bien que c est un tableau de string. Maintenant si je mets la variable tab dans un Console.WriteLine() qu est-ce qu il va se passer ? Testons pour voir, hop, je lance le programme et la, vous voyez ? System.String crochets. Pourquoi as-ton ce resultat ? Bah ici en gros on lui demande de nous afficher ce que vaut le tableau complet, c est donc normal que le programme nous renvoie a. On ne lui demande pas de nous afficher les elements de ce tableau. Donc on sait faire a en C#, il faut faire quoi ? Une boucle exactement. On va donc faire un for int i = 0 ensuite i inferieur au nombre d element de mon tableau soit length et i Ensuite on fait un Console.WriteLine et a l interieur on lui dit de nous afficher tab de i. Si maintenant on lance le programme, eh bien on a bien tous nos elements qui s affiche. La particularite ici, c est que sans la methode split, si on avait place notre chaine dans un tableau. On aurait la chaine directement afficher sur une seule et m me ligne car ce tableau contiendrait un seul element, soit la chaine compl te. En revanche ici, avec la methode split on a separe chaque mot de la chaine et donc chaque mot correspond a un element du tableau. Et pour terminer, passons a la conversion. La conversion d un string a un nombre, on a vu a dans une ancienne video ainsi on a fait un rappel dans la precedente video donc je ne vais pas relancer cette notion. Par contre, il y a quelque chose de nouveau pour vous, c est de convertir un nombre en string gr ce a la methode ToString() qui prend soit aucun param tre soit elle prend une chaine de formatage pour par exemple transformer un int en un valeur monetaire en dollar par exemple qui est impossible de faire a en un type int car il y a des caract res speciaux la virgule le dollar etc Donc ici, on va creer une variable de type int qu on va appeler prix = a 399. Et on va utiliser 3 formats pour l afficher ensuite si vous voulez tester avec d autres format vous pouvez aller sur la documentation de Microsoft et tester de votre c te. Tout d abord, on va tester la premi re, la simple donc on fait un Console.WriteLine() et a l interieur nous allons prendre la variable qui contient le prix ensuite on va pointer vers la methode ToString() Ensuite je vais deux copier-coller sauf que pour les deux autres je vais ajouter une chaine de format pour le 2 me je vais mettre C qui est l abreviation de Currency pour donner une valeur monetaire et le 3 me je vais mettre C0 pour eviter d avoir des zero en plus. Je vais lancer le programme et vous allez comprendre. Donc ici comme vous pouvez le voir, on a tout d abord la conversion en string simple de notre nombre. Ensuite on a la conversion avec une chaine de format pour donner une valeur monetaire avec chiffre et juste en dessous sans. Par contre on a un petit souci on a un point d interrogation. En gros, ici on ne dit pas au compilateur dans quel monnaie nous voulons convertir le int. Pour a, on va devoir faire quelques petites choses. On va tout d abord Importer la Class CultureInfo qui contient les informations sur une culture specifique donc on va taper CultureInfo ensuite on lui donne un symbole, ensuite on fait un new CultureInfo et entre les parenth ses on lui donne la culture dont nous souhaitons ici nous souhaitons obtenir des dollars, donc entre guillemets en tiret us apr s si vous voulez en euros vous tapez fr tiret FR en majuscule. La c est souligne en rouge faut juste importer la class Globalization car la classe CultureInfo appartient a cette classe. Maintenant on va rajouter ici et ici, la variable symbole. Si on lance le programme, on a bien le dollar qui s affiche. Donc recapituler, dans cette video on a vu le formatage de chaines avec la methode ToLower(), ToUpper(), ainsi que la methode Trim(), ensuite on a vu la recherche dans une chaine avec les methodes indexof et lastindexof. Puis la methode Substring pour creer des copies de chaine a partir d un emplacement donne et une limite. Apr s la methode Replace pour effectuer des remplacements d un caract re ou d une sous-chaine. On a checker si une chaine etait vide ou non avec les methodes string.IsNullOrEmpty ou OrWhiteSpace. Ensuite la methode split pour fractionner une chaine et renvoyer un tableau de string. Et pour terminer la conversion d un string en nombre et d un nombre en string avec ou sans formatage. Il existe d autre methode encore pour interagir avec les chaines, j ai essaye de vous donner celle que vous rencontrerez le plus souvent, apr s a vous de chercher de votre cote sur la doc de Microsoft si vous avez besoin d une en particulier Donc voila, j esp re que cette video vous a plus et que tout a ete clair pour vous. Je vous dis a la prochaine dans une nouvelle video.