W3docs

Caractères spéciaux et séquences d'échappement en Java

Utilisez les séquences d'échappement Java comme \n, \t, \\, \" et les échappements Unicode dans les littéraux de chaîne.

Certains caractères ne peuvent pas être écrits directement dans un littéral de chaîne — un " terminerait la chaîne, un saut de ligne littéral briserait la ligne source, et une barre oblique inverse a déjà un rôle spécial : elle indique au compilateur « traite ce qui suit comme un échappement ». Java résout cela avec des séquences d'échappement : des codes courts préfixés par une barre oblique inverse qui représentent ces caractères problématiques. Un mécanisme distinct, les échappements Unicode (\uXXXX), vous permet d'écrire n'importe quel point de code du Plan Multilingue de Base par sa valeur hexadécimale.

Cette page couvre les séquences d'échappement standard, les échappements dans les littéraux char, les échappements Unicode et octaux, la façon dont les blocs de texte assouplissent les règles, et les erreurs les plus courantes.

Les séquences d'échappement standard

SéquenceSignification
\nsaut de ligne (LF, U+000A)
\rretour chariot (CR, U+000D)
\ttabulation (U+0009)
\bretour arrière (U+0008)
\fsaut de page (U+000C)
\"guillemet double
\'guillemet simple
\\une barre oblique inverse
\0caractère nul (U+0000)
\sespace (U+0020), ajouté en Java 15

Exemples :

String multi = "Line 1\nLine 2\nLine 3";
String quoted = "She said \"hi\"";
String tabbed = "name\tage\tcity";
String path = "C:\\Users\\Ada\\code.java";

Lorsque vous affichez ces chaînes, les séquences d'échappement deviennent les caractères réels :

Line 1
Line 2
Line 3
She said "hi"
name    age    city
C:\Users\Ada\code.java

Dans un littéral char

Un littéral char est entouré de guillemets simples. Les mêmes séquences d'échappement s'appliquent, mais les règles s'inversent pour les guillemets : à l'intérieur des guillemets simples, vous devez échapper \', tandis que " peut être écrit normalement. (À l'intérieur d'une chaîne entre guillemets doubles, c'est l'inverse — \" est échappé et ' est ordinaire.)

char quote = '\'';   // a single-quote character
char tab   = '\t';   // a tab
char back  = '\\';   // one backslash
char dquote = '"';   // no escape needed here

Échappements Unicode

Pour intégrer n'importe quel caractère du Plan Multilingue de Base, utilisez \uXXXXXXXX est le point de code hexadécimal à 4 chiffres :

String greeting = "Café";       // "Café"
String pi = "π ≈ 3.14";   // "π ≈ 3.14"
char heart = '♥';               // '♥'

Les points de code hors du BMP (la plupart des emojis) nécessitent une paire de substitution — deux échappements \uXXXX — il est donc presque toujours plus simple de coller directement le caractère.

Note
Les échappements Unicode diffèrent de toutes les autres séquences d'échappement : le compilateur traduit \uXXXX lors d'un tout premier passage, avant même que le source soit découpé en tokens. C'est pourquoi un (saut de ligne) parasite dans une chaîne est une erreur de compilation plutôt qu'un saut de ligne à l'exécution, et pourquoi \uXXXX est valide partout — dans les commentaires, les identificateurs, même entre les opérateurs. Les échappements ordinaires comme \n et \t ne sont interprétés que plus tard, dans les littéraux de chaîne et char.

Échappements octaux

\ suivi de 1 à 3 chiffres octaux (0–7) représente le caractère ayant cette valeur octale :

char c = '\101';   // 'A' (decimal 65)
char d = '\14';    // form feed

On les rencontre rarement — les échappements Unicode sont plus lisibles.

Les blocs de texte brut contournent la plupart des échappements

Dans un bloc de texte (Java 15+), vous pouvez écrire des sauts de ligne et des guillemets doubles non échappés littéralement — parfait pour intégrer du JSON, du SQL ou du HTML. Les seules séquences dont vous avez encore besoin sont \\ pour une barre oblique inverse littérale et \uXXXX pour l'Unicode :

String json = """
        {
          "name": "Ada",
          "tagline": "She invented programming"
        }
        """;

Remarquez que les clés "name" et "tagline" n'ont pas besoin de \" — elles se trouvent à l'intérieur d'un bloc """...""".

Une démonstration

java— editable, runs on the server

Erreurs courantes

  • Écrire "\n" en s'attendant à des fins de ligne Windows. \n représente uniquement LF. Pour des sauts de ligne corrects selon la plateforme dans les sorties formatées, utilisez %n dans printf / format — il se développe en séparateur de ligne de l'hôte.
  • Oublier d'échapper les barres obliques inverses dans les expressions régulières. Un motif regex vit d'abord dans une chaîne Java, il passe donc par deux niveaux d'échappement. Pour correspondre à un chiffre (\d), vous écrivez la chaîne "\\d" — le compilateur convertit \\ en une seule barre oblique inverse, et le moteur regex lit ensuite \d. Pour correspondre à une barre oblique inverse littérale, il en faut quatre : "\\\\".
  • Utiliser pour insérer un saut de ligne. est le point de code de saut de ligne, et comme les échappements Unicode sont traduits avant l'exécution du tokeniseur, le compilateur substitue un vrai saut de ligne au milieu de votre littéral de chaîne — ce qui est une erreur de syntaxe. Utilisez \n pour les sauts de ligne dans les chaînes ; réservez \uXXXX aux caractères imprimables.
  • Un échappement Unicode incomplet ou invalide. \u doit être suivi d'exactement quatre chiffres hexadécimaux. "\u12" ou "\uZZZZ" est une erreur de compilation, pas une barre oblique inverse littérale. Si vous voulez un \u littéral, échappez la barre oblique inverse : "\\u".

Prochaine étape

Java Numbers examine en détail les types numériques, leurs littéraux et leur précision.

Entraînement

Pratique
Quelle séquence d'échappement représente une barre oblique inverse unique dans un littéral de chaîne ?
Quelle séquence d'échappement représente une barre oblique inverse unique dans un littéral de chaîne ?
Was this page helpful?