1. Raisons des caractères d'échappement
Il était une fois, vous avez appris que pour écrire une chaîne de caractères dans le code, vous devez les envelopper de guillemets doubles. Le résultat est un littéral de chaîne .
Mais que faire si nous avons besoin de guillemets à l'intérieur d'une chaîne littérale ? Une chaîne contenant des guillemets — quoi de plus simple ?
Disons que nous voulons afficher le texte "Friends" was nominated for an "Oscar"
. Comment tu fais ça?
Code | Remarques |
---|---|
|
Cette option ne fonctionnera pas ! |
Le problème est que le compilateur pense que vous écrivez un code complètement inattendu :
Code | Remarques |
---|---|
|
Cette option ne fonctionnera pas ! |
Lorsque le compilateur rencontre des guillemets doubles dans le code, il traite ce qui suit comme le début d'un littéral de chaîne. Le guillemet double suivant indique la fin du littéral de chaîne.
Alors, comment écrivez-vous des guillemets doubles à l'intérieur d'un littéral?
2. Caractères d'échappement
Il y a un moyen. C'est ce qu'on appelle les caractères d'échappement . Vous écrivez simplement les guillemets dans la chaîne de texte. Et avant les guillemets, vous ajoutez le symbole \
( barre oblique inverse ).
Voici à quoi ressemble le littéral de chaîne lorsqu'il est écrit correctement :
Code | Remarques |
---|---|
|
Cela fonctionnera ! |
Le compilateur interprétera tout correctement et ne considérera pas le guillemet après la barre oblique inverse comme un guillemet normal.
De plus, si vous affichez cette chaîne à l'écran, les guillemets avec des barres obliques inverses seront traités correctement et le texte s'affichera sans aucune barre oblique inverse :"Friends" was nominated for an "Oscar"
Autre point important. Un guillemet précédé d'une barre oblique inverse représente un seul caractère : nous utilisons simplement une notation astucieuse qui n'interfère pas avec la capacité du compilateur à reconnaître les littéraux de chaîne dans notre code. Vous pouvez attribuer des guillemets à une char
variable :
Code | Remarques |
---|---|
|
\" est un caractère, pas deux |
|
C'est aussi possible : un guillemet double à l'intérieur de guillemets simples |
3. Situations courantes qui se produisent lors de l'échappement de caractères
En plus des guillemets doubles, il existe de nombreux autres caractères que le compilateur gère d'une manière spéciale. Par exemple, un saut de ligne.
Comment ajouter un saut de ligne à un littéral ? Il existe également une combinaison spéciale pour cela:
\n
Si vous avez besoin d'ajouter un saut de ligne à un littéral de chaîne, il vous suffit d'ajouter quelques caractères : \n
.
Exemple:
Code | Sortie console |
---|---|
|
|
Il existe au total 8 combinaisons spéciales comme celle-ci, également appelées séquences d'échappement . Les voici:
Code | Description |
---|---|
\t |
Insérer un caractère de tabulation |
\b |
Insérer un caractère de retour arrière |
\n |
Insérer un caractère de nouvelle ligne |
\r |
Insérer un caractère de retour chariot |
\f |
Insérer un caractère de saut de page |
\' |
Insérer un guillemet simple |
\" |
Insérer un guillemet double |
\\ |
Insérer une barre oblique inverse |
Vous en connaissez deux, mais que signifient les 6 autres ?
\t
est un caractère de tabulation
Lorsque ce texte apparaît dans le texte, cela équivaut à appuyer sur la Tab
touche lors de la saisie. Il décale le texte qui le suit et permet d'aligner le texte.
Exemple:
Code | Sortie console |
---|---|
|
|
\b
signifie "revenir en arrière d'un caractère"
Cette séquence dans une chaîne équivaut à appuyer Backspace
sur la touche du clavier. Il supprime le caractère qui le précède :
Code | Sortie console |
---|---|
|
|
\r
est le caractère de retour chariot
Ce caractère déplace le curseur au début de la ligne courante sans modifier le texte. Tout ce qui est ensuite affiché écrasera la chaîne existante.
Exemple:
Code | Sortie console |
---|---|
|
|
\f
est un caractère de saut de page
Ce symbole nous vient de l'époque des premières imprimantes matricielles. La sortie de cette séquence sur une imprimante amènerait l'imprimante à simplement sortir la feuille actuelle, sans imprimer de texte, jusqu'à ce qu'une nouvelle page commence.
Maintenant, nous appellerions cela un saut de page ou une nouvelle page .
\\
est une barre oblique inverse
Tout est simple ici. Si nous utilisons une barre oblique inverse pour échapper des caractères dans notre texte, alors comment écrivons-nous un caractère barre oblique inverse lui-même dans la chaîne ?
C'est simple : ajoutez une barre oblique inverse au texte — vous devez en écrire deux à la suite.
Exemple:
Code | Sortie console |
---|---|
|
Le compilateur vous criera dessus pour les caractères échappés inconnus. |
|
C'est comme ça que c'est bien fait ! |
4. Encodage Unicode
Comme vous le savez déjà, chaque caractère affiché à l'écran correspond à un code numérique spécifique. Un ensemble standardisé de ces codes est appelé un codage .
Il était une fois, lorsque les ordinateurs venaient d'être inventés, sept bits (moins d'un octet) suffisaient pour coder chaque caractère. Le premier encodage ne contenait que 128 caractères. Ce codage s'appelait ASCII .
ASCII signifie American Standard Code for Information Interchange - une table de codes américaine standard pour les caractères imprimables et certains codes spéciaux.
Il se compose de 33 caractères de contrôle non imprimables (qui affectent le traitement du texte et des espaces) et de 95 caractères imprimables, y compris des chiffres, des lettres latines majuscules et minuscules et plusieurs signes de ponctuation.
Au fur et à mesure que les ordinateurs gagnaient en popularité, chaque pays a commencé à publier son propre encodage. Habituellement, ils prenaient l'ASCII comme point de départ et remplaçaient les caractères ASCII rarement utilisés par des symboles de leurs alphabets respectifs.
Au fil du temps, une idée a émergé : créer un encodage unique qui contienne tous les caractères de tous les encodages du monde.
Ainsi, en 1993, l' encodage Unicode a été créé, et le langage Java est devenu le premier langage de programmation à utiliser cet encodage comme standard pour stocker du texte. Désormais, Unicode est la norme pour l'ensemble de l'industrie informatique.
Bien qu'Unicode lui-même soit la norme, il a plusieurs représentations ou formats de transformation Unicode (UTF) : UTF-8, UTF-16 et UTF-32, etc.
Java utilise une version avancée de l'encodage Unicode — UTF-16 : chaque caractère est encodé sur 16 bits (2 octets). Il peut accueillir jusqu'à 65 536 caractères !
Vous pouvez trouver presque tous les caractères de tous les alphabets du monde dans cet encodage. Naturellement, personne n'a tout mémorisé. Vous ne pouvez pas tout savoir, mais vous pouvez tout rechercher sur Google.
Pour écrire un caractère Unicode dans votre programme en utilisant son code, vous devez écrire \u
+ le code en hexadécimal . Par exemple,\u00A9
Code | Sortie console |
---|---|
|
|
5. Unicode : point de code
"640 kilo-octets devraient suffire à tout le monde ! Ou pas". (Citation attribuée à Bill Gates)
La vie est rude, et au fil du temps, l'encodage UTF-16 a commencé à être inadéquat. Il s'avère qu'il y a beaucoup de langues asiatiques et qu'elles ont beaucoup de glyphes. Et tous ces glyphes ne peuvent tout simplement pas être entassés sur 2 octets.
Ce qui peut être fait? Utilisez plus d'octets !
Mais le type char ne fait que 2 octets et le changer en 4 n'est pas si facile : des milliards de lignes de code Java ont été écrites dans le monde entier, ce qui se briserait si le type char devenait soudainement 4 octets sur une machine Java. Nous ne pouvons donc pas changer le type de caractère !
Il existe une autre approche. Rappelez-vous comment nous échappons aux caractères en mettant une barre oblique inverse devant eux. Fondamentalement, nous avons encodé un seul caractère en utilisant plusieurs caractères.
Les créateurs de Java ont décidé d'utiliser la même approche.
Certains caractères qui apparaissent visuellement comme un seul caractère sont codés comme deux char
s dans une chaîne :
Code | Sortie console |
---|---|
|
|
Maintenant, votre programme Java peut même envoyer des emojis à la console 😎
GO TO FULL VERSION