Exercício – Use os métodos auxiliares IndexOf() e Substring() da cadeia de caracteres

Concluído

Neste exercício, você usará o método IndexOf() e para localizar a posição de um ou mais caracteres ou uma cadeia de caracteres dentro de uma cadeia de caracteres maior. Use o método Substring() para retornar a parte da cadeia de caracteres maior que segue as posições de caractere especificadas.

Você também usará uma versão sobrecarregada do método Substring() para definir o comprimento dos caracteres a serem retornados após uma posição especificada em uma cadeia de caracteres.

Preparar o ambiente de codificação

Este módulo inclui atividades práticas que orientam você durante o processo de criação e execução do código de demonstração. Incentivamos você a concluir essas atividades usando o Visual Studio Code como ambiente de desenvolvimento. O uso do Visual Studio Code para essas atividades introduz você ao trabalho de elaboração e execução de códigos em um ambiente de desenvolvedor que é usado por profissionais em todo o mundo.

Observação

Se você completou outros módulos do Microsoft Learn nesta série de C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Nesse caso, é possível ignorar a seção de etapas a seguir e excluir o código no arquivo Project.cs usado em um exercício anterior.

  1. Abra o Visual Studio Code.

    Você pode usar o menu Iniciar do Windows (ou recurso equivalente em outro sistema operacional) para abrir o Visual Studio Code.

  2. No Visual Studio Code, no menu Arquivo, selecione Abrir Pasta.

  3. Na caixa de diálogo Abrir Pasta, navegue até a pasta Área de Trabalho do Windows.

    Se você tiver um local de pasta diferente no qual mantém os projetos de código, poderá usar esse local de pasta. Neste treinamento, o importante é ter um local que seja fácil de localizar e lembrar.

  4. Na caixa de diálogo Abrir Pasta, selecione Selecionar Pasta.

    Se aparecer uma caixa de diálogo de segurança perguntando se confia nos autores, selecione Sim.

  5. No Visual Studio Code, no menu Terminal, selecione Novo Terminal.

    Observe que o prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:

    C:\Users\someuser\Desktop>
    
  6. No prompt de comando Terminal, para criar o novo aplicativo de console na pasta especificada, digite dotnet new console -o ./CsharpProjects/TestProject e pressione Enter.

    Este comando da CLI do .NET usa um modelo de programa .NET para criar o novo projeto de aplicativo de console C# no local da pasta especificada. O comando cria as pastas CsharpProjects e TestProject para você e usa TestProject como o nome do arquivo .csproj.

  7. No painel EXPLORER, expanda a pasta CsharpProjects.

    Você deve ver a pasta TestProject e dois arquivos: o arquivo de programa do C#, denominado Program.cs, e o arquivo de projeto do C#, denominado TestProject.csproj.

  8. No painel EXPLORER, para exibir o arquivo de código no painel Editor, selecione Program.cs.

  9. Exclua as linhas de código existentes.

    Você está usando esse projeto de console C# para criar, compilar e executar exemplos de código durante este módulo.

  10. Feche o painel do terminal.

Escreva um código para encontrar pares de parênteses inseridas em uma cadeia de caracteres

  1. Verifique se você tem o Visual Studio Code aberto e Program.cs exibidos no painel Editor.

    Observação

    O arquivo Program.cs deve estar vazio. Se não estiver, selecione e exclua todas as linhas de código.

  2. Digite o código de exemplo a seguir no Editor do Visual Studio Code:

    string message = "Find what is (inside the parentheses)";
    
    int openingPosition = message.IndexOf('(');
    int closingPosition = message.IndexOf(')');
    
    Console.WriteLine(openingPosition);
    Console.WriteLine(closingPosition);
    
  3. No menu Arquivo do Visual Studio Code, selecione Salvar.

    O arquivo Program.cs deve ser salvo antes de criar ou executar o código.

  4. No painel EXPLORER, para abrir o Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado.

    Um painel Terminal deve ser aberto e incluir um prompt de comando mostrando que o Terminal está aberto no local da pasta TestProject.

  5. No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.

    Observação

    Se você vir uma mensagem com a mensagem "Não foi possível encontrar um projeto a ser executado", verifique se o prompt de comando Terminal exibe o local esperado da pasta TestProject. Por exemplo: C:\Users\someuser\Desktop\csharpprojects\TestProject>

    A seguinte saída deve ser exibida:

    13
    36
    

    Nesse caso, o índice do caractere ( é 13. Lembre-se de que esses valores são baseados em zero, portanto, é o 14º caractere na cadeia de caracteres. O índice do caractere ) é 36.

    Agora que você tem os dois índices, use-os como limites para recuperar o valor entre eles.

Adicione o código para recuperar o valor entre parênteses

  1. Atualize seu código no Editor do Visual Studio Code da seguinte maneira:

    string message = "Find what is (inside the parentheses)";
    
    int openingPosition = message.IndexOf('(');
    int closingPosition = message.IndexOf(')');
    
    // Console.WriteLine(openingPosition);
    // Console.WriteLine(closingPosition);
    
    int length = closingPosition - openingPosition;
    Console.WriteLine(message.Substring(openingPosition, length));
    
  2. Salve o arquivo de código e use o Visual Studio Code para executar o código. A seguinte saída deve ser exibida:

    (inside the parentheses
    

    O método Substring() precisa da posição inicial e do número de caracteres, ou comprimento, para recuperar. Portanto, você calcula o comprimento em uma variável temporária chamada length e a passamos com o valor openingPosition para recuperar a cadeia de caracteres dentro dos parênteses.

    O resultado é close, no entanto, a saída inclui o parêntese de abertura. Neste exercício, a inclusão dos parênteses não é desejada. Para remover o parêntese da saída, você precisa atualizar o código para ignorar o índice do parêntese em si.

Modificar a posição inicial da subcadeia de caracteres

  1. Atualize seu código no Editor do Visual Studio Code da seguinte maneira:

    string message = "Find what is (inside the parentheses)";
    
    int openingPosition = message.IndexOf('(');
    int closingPosition = message.IndexOf(')');
    
    openingPosition += 1;
    
    int length = closingPosition - openingPosition;
    Console.WriteLine(message.Substring(openingPosition, length));
    
  2. Salve o arquivo de código e use o Visual Studio Code para executar o código. A seguinte saída deve ser exibida:

    inside the parentheses
    
  3. Reserve um momento para examinar o código anterior e a linha openingPosition += 1;.

    Ao aumentar openingPosition em 1, o caractere de parêntese de abertura é ignorado.

    O motivo pelo qual você está usando o valor 1 é porque esse é o comprimento do caractere. Se você tentar localizar um valor iniciado após uma cadeia de caracteres mais longa, por exemplo, <div> ou ---, você usaria o comprimento dessa cadeia de caracteres em vez disso.

  4. Atualize seu código no Editor do Visual Studio Code da seguinte maneira:

    string message = "What is the value <span>between the tags</span>?";
    
    int openingPosition = message.IndexOf("<span>");
    int closingPosition = message.IndexOf("</span>");
    
    openingPosition += 6;
    int length = closingPosition - openingPosition;
    Console.WriteLine(message.Substring(openingPosition, length));
    
  5. Reserve um momento para examinar o código anterior e a linha openingPosition += 6;.

    O trecho de código anterior mostra como localizar o valor dentro de uma marca de abertura e fechamento <span>.

    Nesse caso, você está adicionando 6 ao openingPosition como o deslocamento para calcular o comprimento da subcadeia de caracteres.

Evitar valores mágicos

As cadeias de caracteres embutidas em código como "<span>" na lista de códigos anterior são conhecidas como "cadeias de caracteres mágicas", e os valores numéricos embutidos em código como 6 são conhecidos como "números mágicos". Esses valores "Mágicos" não são recomendados por muitos motivos e devem ser evitados sempre que possível.

  1. Examine o código anterior para considerar como o código poderá ser desfeito se você embutir a cadeia de caracteres "<span>" várias vezes, no código, mas tiver escrito uma instância dela incorretamente como "<sapn>".

    O compilador não detecta "<sapn>" em tempo de compilação porque o valor está em uma cadeia de caracteres. O erro de ortografia leva a problemas em tempo de execução e, dependendo da complexidade do seu código, poderá ser difícil de rastrear.

    Além disso, se você alterar a cadeia de caracteres "<span>" para a "<div>" mais curta, mas esquecer de alterar o número 6 para 5, o código produzirá resultados indesejáveis.

  2. Atualize seu código no Editor do Visual Studio Code da seguinte maneira:

    string message = "What is the value <span>between the tags</span>?";
    
    const string openSpan = "<span>";
    const string closeSpan = "</span>";
    
    int openingPosition = message.IndexOf(openSpan);
    int closingPosition = message.IndexOf(closeSpan);
    
    openingPosition += openSpan.Length;
    int length = closingPosition - openingPosition;
    Console.WriteLine(message.Substring(openingPosition, length));
    
  3. Reserve um minuto para examinar o código atualizado e o uso da palavra-chave const conforme usado em const string openSpan = "<span>";.

    O código usa uma constante com a palavra-chave const. Uma constante permite definir e inicializar uma variável cujo valor nunca pode ser alterado. Em seguida, use essa constante no restante do código sempre que precisar desse valor. Isso garante que o valor seja definido apenas uma vez e que a digitação incorreta da variável const é detectada pelo compilador.

    A listagem de código anterior é uma forma mais segura de escrever o mesmo código que você examinou na seção anterior. Agora, se o valor de openSpan for alterado para <div>, a linha de código que usa a propriedade Length continuará sendo válida.

Recapitulação

Esta unidade cobriu muito material. Veja os fatores mais importantes a serem lembrados:

  • IndexOf() informa a primeira posição de um caractere ou uma cadeia de caracteres dentro de outra cadeia de caracteres.
  • IndexOf() retornará -1 se não for possível encontrar uma correspondência.
  • Substring() retorna apenas a parte especificada de uma cadeia de caracteres usando uma posição inicial e um comprimento opcional.
  • Geralmente, há mais de uma maneira de resolver um problema. Você usou duas técnicas diferentes para localizar todas as instâncias de um determinado caractere ou cadeia de caracteres.
  • Evite valores mágicos codificados. Em vez disso, defina uma variável const. O valor de uma variável constante não pode ser alterado após a inicialização.

Verificar seu conhecimento

1.

Qual é o valor retornado de myString.IndexOf('C'); onde string myString = "C# Time";?