Un extrait de conférence avec un mentor dans le cadre du cours Codegym University. Inscrivez-vous au cours complet.


"Salutations, Amigo. Il était une fois, tu as appris que pour écrire une chaîne de caractères dans le code, tu dois les mettre entre guillemets doubles."

"Oui, et cela nous donne un littéral de chaîne . Il n'y a pas très longtemps que j'ai découvert cela."

"Dans notre profession, c'était il y a longtemps. Mais ce n'est pas le sujet pour le moment. Au lieu de cela, s'il vous plaît, dites-moi quoi faire si nous avons besoin de guillemets à l'intérieur d'une chaîne littérale?"

"Hmm... Une chaîne contenant des guillemets - quoi de plus simple. Je suis sûr qu'il y a un moyen..."

"Oui. Disons que nous voulons afficher le texte "Friends" was nominated for an "Oscar". Comment ferions-nous ?"

"Pour être honnête, je n'en ai aucune idée. Je ne peux penser à rien."

"Vous ne pourrez pas trouver de solution par la logique. Laissez-moi juste vous montrer quoi faire.

Code Remarques
String s = ""Friends" was nominated for an "Oscar"";
Cette option ne fonctionnera pas !"

"Cette option ne fonctionnera pas, car le compilateur interprète cela comme un code entièrement différent :

Code Remarques
String s = ""Friends" was nominated for an "Oscar"";
Cette option ne fonctionnera pas !"

"Une fois que le compilateur a rencontré 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?"

"Il existe un moyen. Cela s'appelle des 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
String s = "\"Friends\" was nominated for an \"Oscar\"";
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 sera affiché sans aucune barre oblique inverse :"Friends" was nominated for an "Oscar"

"Eh bien, je ne vais pas dire que c'est super pratique..."

"Mais que pouvez-vous faire, ce sont les règles. Un 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 charvariable :

Code Remarques
char c = '\"';
\"est un caractère, pas deux
char c = '"';
C'est aussi possible : un guillemet double à l'intérieur de guillemets simples

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
Caractère de saut de ligne

"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
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

"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

« Tu m'en as déjà montré deux. Que signifient les 6 autres ?

"Je vais tout vous expliquer tout de suite.

\test un caractère de tabulation

Lorsque ce texte apparaît dans le texte, cela équivaut à appuyer sur la Tabtouche lors de la saisie. Il décale le texte qui le suit et permet d'aligner le texte.

Exemple:

Code Sortie console
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\bsignifie "revenir en arrière d'un caractère"

Cette séquence dans une chaîne équivaut à appuyer Backspacesur la touche du clavier. Il supprime le caractère qui le précède :

Code Sortie console
System.out.println("Hello\b\b World");
Hel World

\rest le caractère de retour chariot

Ce caractère déplace le curseur au début de la ligne courante sans modifier le texte (selon la version du JDK). Tout ce qui est ensuite affiché écrasera la chaîne existante.

Exemple:

Code Sortie console
System.out.println("Greetings\r World!");
World!ngs

\fest 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
System.out.println("c:\projects\my\first");
Le compilateur vous criera dessus pour les caractères échappés inconnus.
System.out.println("c:\\projects\\my\\first");
C'est comme ça que c'est bien fait !

"Utiliser des doubles barres obliques a du sens. Mais je n'ai pas été capable de mémoriser tout le reste immédiatement. Je vais devoir me fier à vos indices."

« Petit à petit, vous vous souviendrez de ce dont vous avez besoin. Ne vous inquiétez pas. Et pour tout le reste, il y a Google.

Encodage Unicode

"Vous savez déjà que chaque caractère affiché à l'écran correspond à un code numérique spécifique. Un ensemble normalisé de ces codes s'appelle un codage .

"Il était une fois, lorsque les ordinateurs venaient d'être inventés, sept bits (moins d'un octet) suffisaient pour encoder chaque caractère. Le premier encodage ne contenait que 128 caractères. Cet encodage s'appelait ASCII . "

"C'est un nom étrange."

"Il n'y a rien d'étrange à cela. C'est une abréviation. 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.

Encodage Unicode

"Ainsi, en 1993, l' encodage Unicode a été créé, et le langage Java est devenu le premier langage de programmation qui a utilisé cet encodage comme norme pour stocker du texte. Désormais, Unicode est la norme pour toute 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 contenir jusqu'à 65 536 caractères ! Vous pouvez trouver presque tous les caractères de tous les alphabets du monde dans cet encodage. "

« J'espère que je n'ai pas besoin de le savoir par cœur ?

"Si tu veux, vas-y !"

"D'accord, très bien. Je vais utiliser cette règle : vous ne pouvez pas tout savoir, mais vous pouvez tout rechercher sur Google."

"Adopter une approche rationnelle est tout. Ainsi, 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
System.out.println("\u00A9 CodeGym");
© CodeGym

Unicode : point de code

"640 kilo-octets devraient suffire à tout le monde ! Ou pas". Bill Gates l'a dit un jour. Ou non. Au moins cette citation lui est attribuée."

"Haha. 640 kilo-octets ne suffisent même pas pour charger le cerveau d'un robot de nettoyage."

"La vie est rude, et avec le temps, l'encodage UTF-16 a commencé à être inadéquat. Il s'avère qu'il y a beaucoup de langues asiatiques, et elles ont beaucoup de glyphes. Et tous ces glyphes ne peuvent tout simplement pas être entassés sur 2 octets ."

"Alors que faisons-nous?"

"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 un Java machine. 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 chars dans une chaîne :

Code Sortie console
System.out.println("\uD83D\uDD0A");
🔊

"Maintenant, votre programme Java peut même afficher des emojis sur la console 😎"

"Je vais certainement l'utiliser pour m'amuser!"