W3docs

Caracteres Especiais e Sequências de Escape em Java

Use sequências de escape em Java como \n, \t, \\, \" e escapes Unicode dentro de literais de string.

Alguns caracteres não podem ser escritos diretamente dentro de um literal de string — um " encerraria a string, uma nova linha literal quebraria a linha do código-fonte, e uma barra invertida já tem uma função especial: ela diz ao compilador "trate o que vem a seguir como um escape." Java resolve isso com sequências de escape: códigos curtos, prefixados com barra invertida, que representam esses caracteres problemáticos. Um mecanismo separado, os escapes Unicode (\uXXXX), permite escrever qualquer ponto de código do Plano Multilíngue Básico por meio do seu valor hexadecimal.

Esta página aborda as sequências de escape padrão, escapes dentro de literais char, escapes Unicode e octais, como os blocos de texto relaxam as regras e os erros mais comuns que as pessoas cometem.

As sequências de escape padrão

SequênciaSignificado
\nnova linha (LF, U+000A)
\rretorno de carro (CR, U+000D)
\ttabulação (U+0009)
\bretrocesso (U+0008)
\favanço de formulário (U+000C)
\"aspas duplas
\'aspas simples
\\uma única barra invertida
\0caractere nulo (U+0000)
\sespaço (U+0020), adicionado no Java 15

Exemplos:

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";

Ao imprimir esses valores, as sequências de escape se tornam os caracteres reais:

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

Dentro de um literal char

Um literal char é delimitado por aspas simples. As mesmas sequências de escape se aplicam, mas as regras se invertem para as aspas: dentro de aspas simples você deve escapar \', enquanto " pode ser escrito normalmente. (Dentro de uma string com aspas duplas é o inverso — \" é escapado e ' é literal.)

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

Escapes Unicode

Para incorporar qualquer caractere do Plano Multilíngue Básico, use \uXXXX, onde XXXX é o ponto de código hexadecimal de 4 dígitos:

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

Pontos de código fora do BMP (a maioria dos emojis) precisam de um par substituto — dois escapes \uXXXX — portanto, quase sempre é mais fácil colar o caractere diretamente.

Nota
Os escapes Unicode diferem de todas as outras sequências de escape: o compilador traduz \uXXXX em uma etapa muito inicial, antes mesmo de o código-fonte ser dividido em tokens. É por isso que um (nova linha) solto dentro de uma string é um erro de compilação em vez de uma nova linha em tempo de execução, e por que \uXXXX é válido em qualquer lugar — comentários, identificadores, até mesmo entre operadores. Escapes comuns como \n e \t só são interpretados depois, dentro de literais de string e char.

Escapes octais

\ seguido de 1 a 3 dígitos octais (0–7) representa o caractere com esse valor octal:

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

Raramente você os verá — os escapes Unicode são mais claros.

Blocos de texto brutos ignoram a maioria dos escapes

Em um bloco de texto (Java 15+), você pode escrever novas linhas e aspas duplas sem escape literalmente — perfeito para incorporar JSON, SQL ou HTML. As únicas sequências que você ainda precisa são \\ para uma barra invertida literal e \uXXXX para Unicode:

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

Observe que as chaves "name" e "tagline" não precisam de \" — elas ficam dentro de um bloco """...""".

Uma demonstração

java— editable, runs on the server

Erros comuns

  • Escrever "\n" e esperar quebras de linha do Windows. \n é apenas LF. Para quebras de linha corretas para a plataforma em saída formatada, use %n dentro de printf / format — ele se expande para o separador de linha do sistema.
  • Esquecer de escapar barras invertidas em regex. Um padrão regex fica dentro de uma string Java primeiro, passando por duas camadas de escape. Para corresponder a um dígito (\d), você escreve a string "\\d" — o compilador transforma \\ em uma barra invertida, e o motor de regex então lê \d. Para corresponder a uma barra invertida literal, são necessárias quatro: "\\\\".
  • Usar para embutir uma nova linha. é o ponto de código de nova linha, e como os escapes Unicode são traduzidos antes de o tokenizador ser executado, o compilador substitui uma quebra de linha real no meio do seu literal de string — o que é um erro de sintaxe. Use \n para novas linhas dentro de strings; reserve \uXXXX para caracteres imprimíveis.
  • Um escape Unicode incompleto ou inválido. \u deve ser seguido por exatamente quatro dígitos hexadecimais. "\u12" ou "\uZZZZ" é um erro de compilação, não uma barra invertida literal. Se você quiser um \u literal, escape a barra invertida: "\\u".

O que vem a seguir

Números em Java oferece um olhar detalhado sobre os tipos numéricos, seus literais e sua precisão.

Prática

Prática
Qual sequência de escape representa uma única barra invertida dentro de um literal de string?
Qual sequência de escape representa uma única barra invertida dentro de um literal de string?
Was this page helpful?