Exercício – Combinar cadeias de caracteres usando sequências de escape de caracteres

Concluído

Imagine que o seu gerente pediu que você criasse um modelo de uma ferramenta de linha de comando para gerar faturas em inglês e em japonês. Você não precisa criar a funcionalidade real que gera as faturas ainda. Você só precisará fornecer a interface de linha de comando para clientes internos no departamento de cobrança para aprovação. Seu gerente pediu para você ter certeza de que adicionou formatação para tornar claro o progresso atual da ferramenta. Seu gerente também pediu para fornecer instruções para os usuários japoneses sobre como gerar faturas em japonês.

Exercício – Formatar cadeias de caracteres literais em C#

Neste exercício, você aprenderá técnicas diferentes para exibir caracteres especiais e adicionar diferentes tipos de formatação à saída.

Sequências de escape de caractere

Uma sequência de caracteres de escape é uma instrução especial para que o runtime insira um caractere especial que afetará a saída da cadeia de caracteres. Em C#, a sequência de caracteres de escape começa com uma barra invertida \ seguida pelo caractere que será escapado. Por exemplo, a sequência \n adicionará uma nova linha e uma sequência \t adicionará uma guia.

O seguinte código usa sequências de caracteres de escape para adicionar linhas e guias:

Console.WriteLine("Hello\nWorld!");
Console.WriteLine("Hello\tWorld!");

Se executar o código, você verá a saída a seguir:

Hello
World!
Hello   World!

E se você precisar inserir uma aspa dupla em uma cadeia de caracteres literal? Se você não usar a sequência de escape de caracteres, confundirá o compilador, pois ele achará que você deseja terminar a cadeia de caracteres prematuramente. O compilador não entenderá a finalidade dos caracteres após a segunda aspa dupla.

Console.WriteLine("Hello "World"!");

O Editor .NET colocará uma linha ondulada vermelha em World. No entanto, se você tentar executar o código mesmo assim, verá a seguinte saída:

(1,27): error CS1003: Syntax error, ',' expected
(1,27): error CS0103: The name 'World' does not exist in the current context
(1,32): error CS1003: Syntax error, ',' expected

Para lidar com isso, use a sequência de escape \":

Console.WriteLine("Hello \"World\"!");

Se você executar o código acima, verá a seguinte saída:

Hello "World"!

E se você precisar usar a barra invertida para outras finalidades, como exibir um caminho de arquivo?

Console.WriteLine("c:\source\repos");

O C# reserva a barra invertida para sequências de escape. Portanto, se você executar o código, o compilador exibirá o seguinte erro:

(1,22): error CS1009: Unrecognized escape sequence

O problema é a sequência \s. \r não produz um erro porque é uma sequência de escape válida para um retorno de carro. No entanto, não é recomendado usar um retorno de carro neste contexto.

Para resolver o problema, use \\ para exibir uma barra invertida simples.

Console.WriteLine("c:\\source\\repos");

O escape do caractere de barra invertida produz a saída desejada:

c:\source\repos

Formatar a saída usando sequências de escape de caracteres

  1. Selecione todo o código no Editor do .NET e pressione a tecla Delete ou Backspace para excluir.

  2. Para criar o modelo da ferramenta de linha de comando, adicione o seguinte código ao editor:

    Console.WriteLine("Generating invoices for customer \"Contoso Corp\" ...\n");
    Console.WriteLine("Invoice: 1021\t\tComplete!");
    Console.WriteLine("Invoice: 1022\t\tComplete!");
    Console.WriteLine("\nOutput Directory:\t");
    
  3. Agora, execute o código. Você verá o resultado a seguir no console de saída:

    Generating invoices for customer "Contoso Corp" ...
    
    Invoice: 1021           Complete!
    Invoice: 1022           Complete!
    
    Output Directory:    
    

Literal de cadeia de caracteres verbatim

Um literal de cadeia de caracteres textual manterá todo o espaço em branco e os caracteres sem a necessidade de escapar da barra invertida. Para criar uma cadeia de caracteres textual, use a diretiva @ antes da cadeia de caracteres literal.

Console.WriteLine(@"    c:\source\repos    
        (this is where your code goes)");

Observe que a cadeia de caracteres abrange duas linhas e o espaço em branco gerado por essa instrução do C# é mantido na saída a seguir.

    c:\source\repos    
        (this is where your code goes)

Formatar a saída usando literais de cadeia de caracteres verbatim

  1. Adicione a seguinte linha de código abaixo do código que você criou anteriormente:

    Console.Write(@"c:\invoices");
    
  2. Agora, execute o código. Você verá o seguinte resultado que inclui o "diretório de saída":

    Generating invoices for customer "Contoso Corp" ...
    
    Invoice: 1021           Complete!
    Invoice: 1022           Complete!
    
    Output Directory:
    c:\invoices
    

Caracteres de escape Unicode

Você também pode adicionar caracteres codificados em cadeias de caracteres literais usando a sequência de escape \u e, em seguida, um código de quatro caracteres representando algum caractere em Unicode (UTF-16).

// Kon'nichiwa World
Console.WriteLine("\u3053\u3093\u306B\u3061\u306F World!");

Observação

Existem várias advertências. Primeiro, alguns consoles, como o prompt de comando do Windows, não exibirão todos os caracteres Unicode. Ele substituirá esses caracteres por caracteres de ponto de interrogação. Além disso, os exemplos usados aqui são UTF-16. Alguns caracteres exigem UTF-32 e, portanto, exigem uma sequência de escape diferente. Esse é um assunto complicado, e este módulo pretende apenas mostrar o que é possível. Dependendo de sua necessidade, talvez seja necessário gastar bastante tempo aprendendo e trabalhando com caracteres Unicode em seus aplicativos.

Formatar a saída usando caracteres de escape Unicode

Para concluir o modelo da ferramenta de linha de comando, você adicionará uma frase em japonês que tem a seguinte tradução: "para gerar faturas em japonês". Em seguida, você exibirá uma cadeia de caracteres verbatim literal que representa um comando que o usuário pode inserir. Você também adicionará algumas sequências de escape para a formatação.

  1. Adicione o código a seguir à sua página:

    // To generate Japanese invoices:
    // Nihon no seikyū-sho o seisei suru ni wa:
    Console.Write("\n\n\u65e5\u672c\u306e\u8acb\u6c42\u66f8\u3092\u751f\u6210\u3059\u308b\u306b\u306f\uff1a\n\t");
    // User command to run an application
    Console.WriteLine(@"c:\invoices\app.exe -j");
    
  2. Para garantir que o código esteja correto, compare-o com o seguinte:

    Console.WriteLine("Generating invoices for customer \"Contoso Corp\" ...\n");
    Console.WriteLine("Invoice: 1021\t\tComplete!");
    Console.WriteLine("Invoice: 1022\t\tComplete!");
    Console.WriteLine("\nOutput Directory:\t");
    Console.Write(@"c:\invoices");
    
    // To generate Japanese invoices:
    // Nihon no seikyū-sho o seisei suru ni wa:
    Console.Write("\n\n\u65e5\u672c\u306e\u8acb\u6c42\u66f8\u3092\u751f\u6210\u3059\u308b\u306b\u306f\uff1a\n\t");
    // User command to run an application
    Console.WriteLine(@"c:\invoices\app.exe -j");
    
  3. Agora, execute o código. Você verá o resultado a seguir no console de saída:

    Generating invoices for customer "Contoso Corp" ...
    
    Invoice: 1021            Complete!
    Invoice: 1022            Complete!
    
    Output Directory:
    c:\invoices
    
    日本の請求書を生成するには:
        c:\invoices\app.exe -j
    

Recapitulação

Veja o que você aprendeu sobre a formatação de cadeias de caracteres literais até agora:

  • Use as sequências de escape de caractere quando precisar inserir um caractere especial em uma cadeia de caracteres literal, como uma tabulação \t, uma nova linha \n ou uma aspa dupla \".
  • Use um caractere de escape para a barra invertida \\ quando precisar usar uma barra invertida em todos os outros cenários.
  • Use a diretiva @ para criar um literal de cadeia de caracteres que mantenha toda a formatação de espaço em branco e caracteres de barra invertida em uma cadeia de caracteres.
  • Use o \u mais um código de quatro caracteres para representar caracteres Unicode (UTF-16) em uma cadeia de caracteres.
  • Os caracteres Unicode podem não ser impressos corretamente dependendo do aplicativo.