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équence | Signification |
|---|---|
\n | saut de ligne (LF, U+000A) |
\r | retour chariot (CR, U+000D) |
\t | tabulation (U+0009) |
\b | retour arrière (U+0008) |
\f | saut de page (U+000C) |
\" | guillemet double |
\' | guillemet simple |
\\ | une barre oblique inverse |
\0 | caractère nul (U+0000) |
\s | espace (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.javaDans 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 \uXXXX où XXXX 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.
\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 feedOn 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
Erreurs courantes
- Écrire
"\n"en s'attendant à des fins de ligne Windows.\nreprésente uniquement LF. Pour des sauts de ligne corrects selon la plateforme dans les sorties formatées, utilisez%ndansprintf/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\npour les sauts de ligne dans les chaînes ; réservez\uXXXXaux caractères imprimables. - Un échappement Unicode incomplet ou invalide.
\udoit ê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\ulitté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.