Caracteres especiales y secuencias de escape en Java
Usa secuencias de escape en Java como \n, \t, \\, \" y escapes Unicode dentro de literales de cadena.
Algunos caracteres no pueden escribirse directamente dentro de un literal de cadena — un " terminaría la cadena, un salto de línea literal rompería la línea de código fuente, y una barra invertida ya tiene un trabajo especial: le indica al compilador que trate lo que sigue como un escape. Java resuelve esto con secuencias de escape: códigos cortos con prefijo de barra invertida que representan esos caracteres problemáticos. Un mecanismo separado, los escapes Unicode (\uXXXX), te permite escribir cualquier punto de código del Plano Multilingüe Básico usando su valor hexadecimal.
Esta página cubre las secuencias de escape estándar, los escapes dentro de literales char, los escapes Unicode y octales, cómo los bloques de texto relajan las reglas, y los errores más comunes que suelen cometer los desarrolladores.
Las secuencias de escape estándar
| Secuencia | Significado |
|---|---|
\n | nueva línea (LF, U+000A) |
\r | retorno de carro (CR, U+000D) |
\t | tabulación (U+0009) |
\b | retroceso (U+0008) |
\f | avance de página (U+000C) |
\" | comilla doble |
\' | comilla simple |
\\ | una sola barra invertida |
\0 | carácter nulo (U+0000) |
\s | espacio (U+0020), añadido en Java 15 |
Ejemplos:
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";Al imprimir estas cadenas, las secuencias de escape se convierten en los caracteres reales:
Line 1
Line 2
Line 3
She said "hi"
name age city
C:\Users\Ada\code.javaDentro de un literal char
Un literal char se encierra entre comillas simples. Las mismas secuencias de escape aplican, pero las reglas se invierten para las comillas: dentro de comillas simples debes escapar \', mientras que " puede escribirse directamente. (Dentro de una cadena delimitada por comillas dobles ocurre lo contrario — \" se escapa y ' se escribe directamente.)
char quote = '\''; // a single-quote character
char tab = '\t'; // a tab
char back = '\\'; // one backslash
char dquote = '"'; // no escape needed hereEscapes Unicode
Para incrustar cualquier carácter del Plano Multilingüe Básico, usa \uXXXX donde XXXX es el punto de código en hexadecimal de 4 dígitos:
String greeting = "Café"; // "Café"
String pi = "π ≈ 3.14"; // "π ≈ 3.14"
char heart = '♥'; // '♥'Los puntos de código fuera del BMP (la mayoría de emojis) requieren un par sustituto — dos escapes \uXXXX — por lo que casi siempre es más fácil pegar el carácter directamente.
\uXXXX en un primer paso muy temprano, antes de que el código fuente se divida en tokens. Por eso, un (nueva línea) inesperado dentro de una cadena es un error de compilación en lugar de una nueva línea en tiempo de ejecución, y por eso \uXXXX es válido en cualquier lugar — comentarios, identificadores, incluso entre operadores. Los escapes ordinarios como \n y \t solo se interpretan más tarde, dentro de literales de cadena y char.Escapes octales
\ seguido de 1 a 3 dígitos octales (0–7) representa el carácter con ese valor octal:
char c = '\101'; // 'A' (decimal 65)
char d = '\14'; // form feedRaramente verás estos — los escapes Unicode son más claros.
Los bloques de texto sin formato evitan la mayoría de los escapes
En un bloque de texto (Java 15+), puedes escribir saltos de línea y comillas dobles sin escapar literalmente — perfecto para incrustar JSON, SQL o HTML. Las únicas secuencias que aún necesitas son \\ para una barra invertida literal y \uXXXX para Unicode:
String json = """
{
"name": "Ada",
"tagline": "She invented programming"
}
""";Observa que las claves "name" y "tagline" no necesitan \" — están dentro de un bloque """...""".
Una demostración
Errores comunes
- Escribir
"\n"y esperar saltos de línea de Windows.\nes solo LF. Para saltos de línea correctos según la plataforma en salida formateada, usa%ndentro deprintf/format— se expande al separador de línea del sistema. - Olvidar escapar las barras invertidas en expresiones regulares. Un patrón regex vive dentro de una cadena Java primero, por lo que pasa por dos capas de escape. Para coincidir con un dígito (
\d) escribes la cadena"\\d"— el compilador convierte\\en una sola barra invertida, y el motor de regex entonces lee\d. Para coincidir con una barra invertida literal necesitas cuatro:"\\\\". - Usar
para insertar una nueva línea.es el punto de código de nueva línea, y dado que los escapes Unicode se traducen antes de que se ejecute el analizador léxico, el compilador sustituye un salto de línea real en medio de tu literal de cadena — lo que provoca un error de sintaxis. Usa\npara nuevas líneas dentro de cadenas; reserva\uXXXXpara caracteres imprimibles. - Un escape Unicode incompleto o inválido.
\udebe ir seguido de exactamente cuatro dígitos hexadecimales."\u12"o"\uZZZZ"es un error de compilación, no una barra invertida literal. Si quieres un\uliteral, escapa la barra invertida:"\\u".
Qué sigue
Números en Java examina en detalle los tipos numéricos, sus literales y su precisión.