1. Razões para escapar de personagens
Era uma vez, você aprendeu que para escrever uma string de caracteres no código, você precisa colocá-los entre aspas duplas. O resultado é uma string literal .
Mas o que fazemos se precisarmos de aspas dentro de uma string literal? Uma string contendo aspas — o que poderia ser mais fácil?
Digamos que queremos exibir o texto "Friends" was nominated for an "Oscar"
. Como você faz isso?
Código | Notas |
---|---|
|
Esta opção não funcionará! |
O problema é que o compilador pensa que você está escrevendo um código completamente inesperado:
Código | Notas |
---|---|
|
Esta opção não funcionará! |
Depois que o compilador encontra aspas duplas no código, ele trata o que segue como o início de uma string literal. A próxima aspa dupla indica o final da string literal.
Então, como você escreve aspas duplas dentro de um literal?
2. Personagens de fuga
Há uma maneira. É chamado de escape de caracteres . Você acabou de escrever as aspas dentro da string de texto. E antes das aspas, você adiciona o símbolo \
( barra invertida ).
É assim que a string literal se parece quando escrita corretamente:
Código | Notas |
---|---|
|
Isso vai funcionar! |
O compilador interpretará tudo corretamente e não considerará as aspas após a barra invertida como aspas normais.
Além disso, se você enviar esta string para a tela, as aspas com barra invertida serão processadas corretamente e o texto será exibido sem nenhuma barra invertida:"Friends" was nominated for an "Oscar"
Outro ponto importante. Uma aspa precedida por uma barra invertida representa um único caractere: estamos simplesmente usando uma notação elegante que não interfere na capacidade do compilador de reconhecer strings literais em nosso código. Você pode atribuir aspas a uma char
variável:
Código | Notas |
---|---|
|
\" é um personagem, não dois |
|
Isso também é possível: aspas duplas dentro de aspas simples |
3. Situações comuns que ocorrem ao escapar de personagens
Além das aspas duplas, existem muitos outros caracteres que o compilador manipula de maneira especial. Por exemplo, uma quebra de linha.
Como adicionamos uma quebra de linha a um literal? Existe também uma combinação especial para isso:
\n
Se você precisar adicionar uma quebra de linha a uma string literal, basta adicionar alguns caracteres: \n
.
Exemplo:
Código | Saída do console |
---|---|
|
|
Há um total de 8 combinações especiais como esta, que também são chamadas de sequências de escape . Aqui estão eles:
Código | Descrição |
---|---|
\t |
Inserir um caractere de tabulação |
\b |
Inserir um caractere de backspace |
\n |
Inserir um caractere de nova linha |
\r |
Inserir um caractere de retorno de carro |
\f |
Inserir um caractere de feed de página |
\' |
Inserir uma aspa simples |
\" |
Insira aspas duplas |
\\ |
Inserir uma barra invertida |
Você está familiarizado com dois deles, mas o que os outros 6 significam?
\t
é um caractere de tabulação
Quando este texto aparece no texto, é equivalente a pressionar a Tab
tecla durante a digitação. Desloca o texto que o segue e permite alinhar o texto.
Exemplo:
Código | Saída do console |
---|---|
|
|
\b
significa 'voltar um caractere'
Essa sequência em uma string equivale a pressionar a Backspace
tecla no teclado. Ele remove o caractere que o precede:
Código | Saída do console |
---|---|
|
|
\r
é o caractere de retorno de carro
Este caractere move o cursor para o início da linha atual sem alterar o texto. O que quer que seja exibido a seguir substituirá a string existente.
Exemplo:
Código | Saída do console |
---|---|
|
|
\f
é um caractere de feed de página
Este símbolo chegou até nós desde os dias das primeiras impressoras matriciais. A saída dessa sequência para uma impressora faria com que a impressora simplesmente alimentasse a folha atual, sem imprimir nenhum texto, até que uma nova página começasse.
Agora chamaríamos isso de quebra de página ou nova página .
\\
é uma barra invertida
Tudo é direto aqui. Se usarmos uma barra invertida para escapar dos caracteres em nosso texto, como escreveremos o próprio caractere de barra invertida na string?
É simples: adicione uma barra invertida ao texto — você deve escrever duas seguidas.
Exemplo:
Código | Saída do console |
---|---|
|
O compilador gritará com você por caracteres de escape desconhecidos. |
|
É assim que se faz certo! |
4. Codificação Unicode
Como você já sabe, cada caractere exibido na tela corresponde a um código numérico específico. Um conjunto padronizado desses códigos é chamado de codificação .
Era uma vez, quando os computadores foram inventados, sete bits (menos de um byte) eram suficientes para codificar cada caractere. A primeira codificação continha apenas 128 caracteres. Essa codificação foi chamada de ASCII .
ASCII significa American Standard Code for Information Interchange — uma tabela de códigos americanos padrão para caracteres imprimíveis e alguns códigos especiais.
Ele consiste em 33 caracteres de controle não imprimíveis (que afetam como o texto e os espaços são processados) e 95 caracteres imprimíveis, incluindo números, letras latinas maiúsculas e minúsculas e vários sinais de pontuação.
À medida que a popularidade dos computadores crescia, cada país começou a lançar sua própria codificação. Normalmente, eles tomavam o ASCII como ponto de partida e substituíam caracteres ASCII raramente usados por símbolos de seus respectivos alfabetos.
Com o tempo, surgiu uma ideia: criar uma única codificação que contenha todos os caracteres de todas as codificações do mundo.
Assim, em 1993, a codificação Unicode foi criada e a linguagem Java tornou-se a primeira linguagem de programação que usou essa codificação como padrão para armazenar texto. Agora o Unicode é o padrão para toda a indústria de TI.
Embora o próprio Unicode seja o padrão, ele possui várias representações ou formatos de transformação Unicode (UTF): UTF-8, UTF-16 e UTF-32, etc.
Java usa uma versão avançada da codificação Unicode — UTF-16: cada caractere é codificado em 16 bits (2 bytes). Pode acomodar até 65.536 caracteres!
Você pode encontrar quase todos os caracteres de todos os alfabetos do mundo nessa codificação. Naturalmente, ninguém memorizou tudo. Você não pode saber tudo, mas pode pesquisar tudo no Google.
Para escrever um caractere Unicode em seu programa usando seu código, você precisa escrever \u
+ o código em hexadecimal . Por exemplo,\u00A9
Código | Saída do console |
---|---|
|
|
5. Unicode: ponto de código
"640 kilobytes deveriam ser suficientes para todos! Ou não". (Citação atribuída a Bill Gates)
A vida é difícil e, com o tempo, a codificação UTF-16 começou a ficar inadequada. Acontece que existem muitos idiomas asiáticos e eles têm muitos glifos. E todos esses glifos simplesmente não podem ser compactados em 2 bytes.
O que pode ser feito? Use mais bytes !
Mas o tipo char tem apenas 2 bytes e alterá-lo para 4 não é tão fácil: bilhões de linhas de código Java foram escritas em todo o mundo, o que seria interrompido se o tipo char de repente se tornasse 4 bytes em uma máquina Java. Então não podemos mudar o tipo de char!
Existe outra abordagem. Lembre-se de como escapamos dos caracteres colocando uma barra invertida na frente deles. Basicamente, codificamos um único caractere usando vários caracteres.
Os criadores do Java decidiram usar a mesma abordagem.
Alguns caracteres que aparecem visualmente como um único caractere são codificados como dois char
s em uma string:
Código | Saída do console |
---|---|
|
|
Agora seu programa Java pode até enviar emojis para o console 😎