Traitement des chaînes de caractères et du texte
Le langage de programmation C# offrent différentes méthodes pour manipuler un texte : comme par exemple comparer des chaînes de caractères, rechercher des sous-chaînes de caractères, extraire des sous-chaînes de caractères sur des paramètres précédemment réglés et diviser des chaînes de caractères par des caractères de séparation. Il permet également des chaînes de caractères avec la classe StringBuilder. Aussi, il permet de traiter des chaînes de caractères en utilisant expressions régulières (regex).
Les chaînes de caractères
En pratique, nous arrivons souvent au traitement de processus texte : lecture de fichiers texte, recherche de mots-clefs et remplacement de ceux-ci dans un paragraphe, validation des données d'entrée de l'utilisateur,... en utilisant le langage de programmation C#. Mais qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères est une séquence de caractères ou un tableau de caractères entreposés dans une certaine adresse en mémoire. Pour entreposer une séquence de caractère, il utilise un type primitif n'offrant la possibilité qu'un seul caractère, soit le type de données char. Ainsi, lorsqu'il est nécessaire de traiter plus d'un caractère, des chaînes de caractères nous viennent en aide.
Dans le cadre d'application .NET, chaque caractère a un numéro de série de la table Unicode. Le standard Unicode est établi à la fin des années 1980 et au début des années 1990 afin d'entreposer différents types de données texte. Son prédécesseur ASCII est capable d'enregistrer seulement 128 ou 256 caractères (norme ASCII respective avec table 7 bits ou 8 bits). Malheureusement, cela ne répond souvent pas aux besoins des utilisateurs - car nous pouvons contenir 128 caractères uniquement des chiffres, des lettres latines majuscules et minuscules et certains caractères individuels spécifiques. Lorsque vous devez travailler avec du texte en cyrillique ou dans une autre langue spécifique (par exemple chinois ou arabe), 128 ou 256 caractères sont extrêmement insuffisants. Voici pourquoi .NET utilise une table de codes 16 bits pour les caractères. Grâce à notre connaissance des systèmes numériques et de la représentation des informations dans les ordinateurs, nous pouvons calculer que la table de codes entrepose 2^16 = 65 536 caractères. Certains caractères sont encodés d'une manière spécifique, il est donc possible d'utiliser deux caractères de la table Unicode pour créer un nouveau caractère - les signes résultants dépassent 100 000.
La classe System.String
La classe System.String nous permet de gérer des chaînes de caractères en C#. Pour déclarer les chaînes, nous continuerons à utiliser le mots clef string, étant un alias en C# de la classe System.String du cadre d'application .NET. Le travail avec la chaîne de caractères nous facilite dans la manipulation du contenu du texte : construction de textes, recherche de texte et bien d'autres opérations. Exemple de déclaration d'une chaîne de caractères :
string machaine = "Bonjour Gladir.com en C#";
Nous venons de déclarer la variable machaine de type string dont le contenu est la phrase textuelle est «Bonjour Gladir.com en C#». La représentation du contenu dans la chaîne de caractères ressemble de près à ceci :
La représentation interne de la classe est assez simple - un tableau de caractères. Nous pouvons éviter l'utilisation de la classe en déclarant une variable de type char[] et en remplissant les éléments du tableau caractère par caractère. Cependant, il y a aussi quelques inconvénients : le remplissage du tableau se fait caractère par caractère, pas en même temps, nous devons connaître la longueur du texte afin de savoir s'il rentrera dans l'espace déjà alloué pour le tableau et le traitement du texte est manuel.
La classe String : la solution universelle ?
L'utilisation de System.String n'est pas la solution idéale et universelle - il est parfois approprié d'utiliser différentes structures de caractères. En C#, nous avons d'autres classes pour le traitement de texte. La chaîne de caractères type est plus spéciale que les autres types de données. C'est une classe et en tant que telle, elle est conforme aux principes de la programmation orientée objet. Ses valeurs sont entreposées dans la mémoire dynamique (mémoire de tas géré), et les variables de type de données string gardent une référence à un objet dans la mémoire de tas.
Les chaînes de caractères sont immuables
La classe String a une caractéristique importante - les séquences de caractères entreposées dans une variable de la classe ne changent jamais (immuables). Après avoir été assignée une fois, le contenu de la variable ne change pas directement - si nous essayons de changer la valeur, elle sera enregistrée dans un nouvel emplacement dans la mémoire dynamique et la variable pointera vers elle.
Chaînes et tableaux de caractères
Les chaînes de caractères sont très similaires aux tableaux char (char[]), mais contrairement à eux, elles ne peuvent pas être modifiées. Comme les tableaux, ils ont des propriétés telles que Length, renvoyant la longueur de la chaîne de caractères et permet l'accès par index. L'indexation, telle qu'elle est utilisée dans les tableaux, prend des indices de 0 à Length-1. L'accès au caractère d'une certaine position dans une chaîne de caractères se fait avec l'opérateur [] (indexeur), mais il n'est autorisé qu'à lire les caractères (et non à y écrire) :
string chaine = "gladir";
char caractere = str[1]; // caractere == 'b'
chaine[1] = 'a'; // Erreur de compilation !
caractere = chaine[50];
Échappement des chaînes de caractères
Si nous voulons utiliser des guillemets dans le contenu de la chaîne de caractères, nous devons mettre une barre oblique devant eux pour identifier que nous considérons le caractère guillemets lui-même et ne pas utiliser les guillemets pour terminer la chaîne de caractères :
string guillemet = "C'est un test entre \"guillemet\" pour C#";
Les doubles guillemets de l'exemple font partie du texte. Ils sont ajoutés dans la variable en les plaçant après la barre oblique inverse du caractère d'échappement (\). De cette façon, le compilateur reconnaît que les doubles guillemets ne sont pas utilisés pour démarrer ou terminer une chaîne de caractères, mais font partie des données. L'affichage de caractères spéciaux dans le code source est appelé échappement.