Um trecho de palestra com um mentor como parte do curso Codegym University. Inscreva-se no curso completo.


"Saudações, amigo. Era uma vez, você aprendeu que para escrever uma string de caracteres em código, você precisa colocá-los entre aspas duplas."

"Sim, e isso nos dá uma string literal . Não faz muito tempo que descobri isso."

"Em nossa profissão, isso foi há muito tempo. Mas esse não é o ponto agora. Em vez disso, diga-me o que fazer se precisarmos de aspas dentro de uma string literal?"

"Hmm... Uma string contendo aspas — o que poderia ser mais fácil. Tenho certeza de que há alguma maneira..."

"Sim. Digamos que queremos exibir o texto "Friends" was nominated for an "Oscar". Como faríamos isso?"

"Para ser sincero, não faço ideia. Não consigo pensar em nada."

"Você não será capaz de chegar a uma solução por meio da lógica. Deixe-me apenas mostrar o que fazer.

Código Notas
String s = ""Friends" was nominated for an "Oscar"";
Esta opção não funcionará!"

"Esta opção não funcionará, porque o compilador interpreta isso como um código totalmente diferente:

Código Notas
String s = ""Friends" was nominated for an "Oscar"";
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 fim da string literal."

"Então, como você escreve aspas duplas dentro de um literal?"

"Existe uma maneira. Chama-se caracteres de escape . Basta 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
String s = "\"Friends\" was nominated for an \"Oscar\"";
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ê exibir esta string na tela, as aspas com barras invertidas serão processadas corretamente e o texto será exibido sem nenhuma barra invertida:"Friends" was nominated for an "Oscar"

"Bem, eu não vou dizer que isso é super conveniente..."

"Mas o que você pode fazer, essas são as regras. 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 charvariável:

Código Notas
char c = '\"';
\"é um personagem, não dois
char c = '"';
Isso também é possível: aspas duplas dentro de aspas simples

Situações comuns que ocorrem ao escapar de caracteres

"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? Também existe uma combinação especial para isso:

\n
caractere de quebra de linha

"Se você precisar adicionar uma quebra de linha a uma string literal, basta adicionar alguns caracteres" \n.

Exemplo:

Código Saída do console
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

"Há um total de 8 combinações especiais como esta, que também são chamadas de sequências de escape . Aqui estão elas:

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ê já me mostrou dois deles. O que os outros 6 significam?"

"Vou explicar tudo agora.

\té um caractere de tabulação

Quando este texto aparece no texto, é equivalente a pressionar a Tabtecla durante a digitação. Desloca o texto que o segue e permite alinhar o texto.

Exemplo:

Código Saída do console
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\bsignifica 'voltar um caractere'

Essa sequência em uma string equivale a pressionar a Backspacetecla no teclado. Ele remove o caractere que o precede:

Código Saída do console
System.out.println("Hello\b\b World");
Hel World

\ré o caractere de retorno de carro

Este caractere move o cursor para o início da linha atual sem alterar o texto (depende da versão do JDK). O que quer que seja exibido a seguir substituirá a string existente.

Exemplo:

Código Saída do console
System.out.println("Greetings\r World!");
World!ngs

\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
System.out.println("c:\projects\my\first");
O compilador gritará com você por caracteres de escape desconhecidos.
System.out.println("c:\\projects\\my\\first");
É assim que se faz certo!

"Usar barras duplas faz sentido. Mas não consegui memorizar todo o resto imediatamente. Vou ter que confiar nas suas dicas."

"Gradualmente, você se lembrará do que precisa. Não se preocupe. E para todo o resto, existe o Google.

Codificação Unicode

"Você já sabe que 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 recentemente inventados, sete bits (menos de um byte) eram suficientes para codificar cada caractere. A primeira codificação continha apenas 128 caracteres. Essa codificação era chamada de ASCII . "

"É um nome estranho."

"Não há nada de estranho nisso. É uma abreviação. 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 os computadores cresciam em popularidade, 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 os 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.

Codificação Unicode

"Assim, em 1993, a codificação Unicode foi criada e a linguagem Java se tornou 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). Ele pode acomodar até 65.536 caracteres! Você pode encontrar quase todos os caracteres de todos os alfabetos do mundo nessa codificação. "

"Espero não precisar saber de cor?"

"Se você quiser, vá em frente!"

"Ok, tudo bem. Vou usar esta regra: você não pode saber tudo, mas pode pesquisar tudo no Google."

"Adotar uma abordagem racional é tudo. Portanto, 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
System.out.println("\u00A9 CodeGym");
© CodeGym

Unicode: ponto de código

"640 kilobytes deveriam ser suficientes para todos! Ou não". Bill Gates uma vez disse isso. Ou não. Pelo menos esta citação é atribuída a ele."

"Haha. 640 kilobytes não são suficientes nem para carregar o cérebro de um robô de limpeza."

"A vida é difícil e, com o tempo, a codificação UTF-16 começou a ser 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 ."

"Então, o que fazemos?"

"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 por Java máquina. Portanto, não podemos alterar 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 de Java decidiram usar a mesma abordagem.

"Alguns caracteres que aparecem visualmente como um único caractere são codificados como dois chars em uma string:

Código Saída do console
System.out.println("\uD83D\uDD0A");
🔊

"Agora seu programa Java pode até enviar emojis para o console 😎"

"Eu definitivamente vou usar isso para me divertir!"