JavaRush /Blogue Java /Random-PT /Personagens escapando

Personagens escapando

Publicado no grupo Random-PT
Olá! Nas aulas anteriores já nos familiarizamos com strings, que são representadas pela classe em Java String. Como você provavelmente se lembra, uma string é uma sequência de caracteres. Os símbolos podem ser qualquer coisa - letras, números, sinais de pontuação e assim por diante. O principal é que ao criar uma string, toda a sequência seja colocada entre aspas:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
Mas o que acontece se precisarmos criar uma string que também contenha aspas? Por exemplo, queremos contar ao mundo sobre o nosso livro favorito:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
O compilador parece estar insatisfeito com alguma coisa! Qual você acha que poderia ser o motivo do erro e por que ele ocorreu especificamente com aspas? O fato é que o compilador percebe aspas de uma forma estritamente definida, ou seja, envolve uma string nelas. E toda vez que ele vê um caractere ", ele espera que o mesmo caractere siga para ele, e entre eles estará o texto da linha que ele, o compilador, deve criar. No nosso caso, as aspas ao redor da palavra “Crepúsculo” estão dentro de outras aspas . E quando o compilador chega a esse trecho de texto, ele simplesmente não entende o que quer dele. Parece que há uma citação, o que significa que deve criar uma string. Mas ele já está fazendo isso! Esta é precisamente a razão. Simplificando, neste ponto o compilador não entende o que deseja dele. "Outra citação? Isso é algum tipo de erro? Já estou criando uma string! Ou devo criar outra? Uhhh...:/" Precisamos explicar ao compilador quando uma citação é um comando para ela (" crie uma string!"), e quando for um símbolo simples (“exiba a palavra “Crepúsculo” junto com aspas!”). Para conseguir isso, Java usa escape de caracteres . Isso é feito usando um caractere especial. Assim: \. Na vida comum, é chamada de "barra invertida", mas em Java (em combinação com o caractere a ser escapado) é chamada de sequência de escape . Por exemplo, \"aqui está - uma sequência de controle para exibir cotações na tela. Tendo encontrado tal construção dentro do seu código, o compilador entenderá que se trata apenas de um caractere de “aspas” que precisa ser exibido na tela. Vamos tentar alterar nosso código com o livro:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
Escapamos das duas aspas "internas" com um \. Vamos tentar executar o método main()... Saída do console:

Моя любимая книга - "Сумерки" Стефани Майер
Ótimo, o código funcionou exatamente conforme necessário! As aspas estão longe de ser o único caso em que podemos precisar de escape de caracteres. Por exemplo, queríamos contar a alguém sobre nosso trabalho:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
E novamente um erro! Você já consegue adivinhar qual é o motivo? O compilador novamente não entende o que fazer. Afinal, um símbolo \para ele nada mais é do que uma sequência de controle ! Ele espera que após a barra haja algum caractere que deverá ser interpretado de alguma forma especial (por exemplo, aspas). No entanto, aqui \seguem as letras normais. Portanto, o compilador está confuso novamente. O que fazer? Exatamente igual à última vez: basta adicionar \mais um ao nosso \!
public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
Vamos ver o que resulta disso: Saída do console:

Мои рабочие файлы лежат в папке D:\Work Projects\java
Super! O compilador determinou instantaneamente que esses \eram caracteres comuns que precisavam ser enviados para o console junto com o resto. Existem algumas sequências de escape em Java. Aqui está a lista completa:
  • \t caractere de tabulação.
  • \b um caractere de retorno no texto um passo atrás ou exclusão de um caractere em uma linha (backspace).
  • \n caractere de nova linha.
  • \r caractere de retorno de carro.
  • \f execução da página.
  • \' caractere de aspas simples.
  • \" caractere de aspas duplas.
  • \\caractere de barra invertida (\).
Assim, se o compilador encontrar um símbolo no texto \n, ele entenderá que não se trata apenas de um símbolo e de uma letra que precisa ser enviado ao console, mas de um comando especial para ele - “faça uma quebra de linha!” Por exemplo, isso pode ser útil para nós se quisermos enviar um trecho de um poema para o console:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
E foi isso que obtivemos: Saída do console:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
Exatamente o que é necessário! O compilador reconheceu a sequência de escape e produziu um trecho de verso em 4 linhas.

Unicode

Outro tópico importante que você precisa conhecer em relação ao escape de caracteres é Unicode . Unicode é um padrão de codificação de caracteres que inclui caracteres de quase todos os idiomas escritos do mundo. Em outras palavras, esta é uma lista de códigos especiais, na qual existe um código para quase todos os caracteres de qualquer idioma! Naturalmente, esta lista é muito grande e ninguém a memoriza :) Se você estiver interessado em saber de onde veio e por que foi necessário, leia o artigo informativo sobre Habrahabr . Todos os códigos de caracteres em Unicode são “letra u+ dígito hexadecimal”. Por exemplo, o famoso símbolo de copyright é indicado pelo código u00A9 . Então, se você precisar usar esse caractere ao trabalhar com texto em Java, você pode escapar dele no seu texto! Por exemplo, queremos que todos saibam que esta palestra é protegida por direitos autorais do JavaRush:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
Saída do console:

Лекция "Экранирование символов", © 2018 Javarush
Ótimo, deu tudo certo! Mas personagens especiais não são tudo! Usando Unicode e escape de caracteres, você pode codificar texto escrito em diferentes idiomas ao mesmo tempo. E até em vários dialetos diferentes da mesma língua!
public class Main {
   public static void main(String[] args) {

       System.out.println("\u041c\u0430\u0301\u043e " +
               "\u0426\u0437\u044d\u0434\u0443\u0301\u043d " +
               "\u0028\u043a\u0438\u0442\u002e \u0442\u0440\u0430\u0434\u002e " +
               "\u6bdb\u6fa4\u6771\u002c \u0443\u043f\u0440\u002e " +
               "\u6bdb\u6cfd\u4e1c\u002c \u043f\u0438\u043d\u044c\u0438\u043d\u044c\u003a " +
               "\u004d\u00e1\u006f \u005a\u00e9\u0064\u014d\u006e\u0067\u0029 " +
               "\u2014 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 " +
               "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 " +
               "\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 " +
               "\u0434\u0435\u044f\u0442\u0435\u043b\u044c \u0058\u0058 \u0432\u0435\u043a\u0430\u002c " +
               "\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a " +
               "\u043c\u0430\u043e\u0438\u0437\u043c\u0430\u002e");
   }
}
Saída do console:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
Neste exemplo, conhecendo os códigos dos caracteres, escrevemos uma string composta pelo alfabeto cirílico e três (!) tipos diferentes de escrita de caracteres chineses - clássico, simplificado e latino (pinyin). É basicamente isso! Agora você sabe o suficiente sobre escape de caracteres para usar esta ferramenta em seu trabalho :) Se tudo não estiver totalmente claro, aconselho você a ler este artigo : será uma boa adição.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION