Exercício – Use os métodos auxiliares IndexOf() e Substring() da cadeia de caracteres
- 25 minutos
Neste exercício, você usará o IndexOf() método para localizar a posição de uma ou mais cadeias de caracteres dentro de uma cadeia de caracteres maior. Use o Substring() método 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 Substring() método 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 ajuda você a se sentir confortável escrevendo e executando código em um ambiente de desenvolvedor 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.
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.
No menu Arquivo do Visual Studio Code, selecione Abrir Pasta.
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.
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.
No menu Terminal do Visual Studio Code, selecione Novo Terminal.
Observe que o prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:
C:\Users\someuser\Desktop>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.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.
No painel EXPLORER, para exibir o arquivo de código no painel Editor, selecione Program.cs.
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.
Feche o painel do terminal.
Escrever código para localizar pares parênteses inseridos em uma cadeia de caracteres
Verifique se o Visual Studio Code está aberto e se o arquivo Program.cs está sendo exibido no painel do Editor.
Observação
O arquivo Program.cs deve estar vazio. Selecione e exclua todas as linhas de código existentes caso isso não já não tenha sido feito.
Digite o seguinte código 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);No menu Arquivo do Visual Studio Code, selecione Salvar.
O arquivo Program.cs deve ser salvo antes de criar ou executar o código.
No painel EXPLORER, para abrir um Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado.
Um painel do Terminal deve ser aberto e deve incluir um prompt de comando mostrando que o Terminal está aberto na pasta do TestProject.
No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.
Observação
Se você vir uma mensagem dizendo "Não foi possível localizar um projeto a ser executado", verifique se o prompt de comando do Terminal exibe o local esperado da pasta TestProject. Por exemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>A seguinte saída deve ser exibida:
13 36Nesse 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, pode usá-los como limites para recuperar o valor entre eles.
Adicionar código para recuperar o valor entre parênteses
Atualize o 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));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 parenthesesO
Substring()método 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 chamadalengthe passa-o com oopeningPositionvalor para recuperar a cadeia de caracteres dentro do parêntese.O resultado é próximo, 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 sub-cadeia de caracteres
Atualize o 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));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 parenthesesReserve um momento para examinar o código anterior e a linha
openingPosition += 1;.Ao aumentar o
openingPositionby1, você ignora o caractere de parêntese de abertura.O motivo pelo qual você está usando o valor
1é porque esse é o comprimento do caractere. Se você tentar localizar um valor começando após uma cadeia de caracteres mais longa, por exemplo,<div>ou---, você usaria o comprimento dessa cadeia de caracteres em vez disso.Atualize o 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));Reserve um momento para examinar o código anterior e a linha
openingPosition += 6;.O snippet de código anterior mostra como localizar o valor dentro de uma marca de abertura e fechamento
<span>.Nesse caso, você está adicionando
6aoopeningPositiondeslocamento como o deslocamento para calcular o comprimento da subcadeia de caracteres.
Evitar valores mágicos
Cadeias de caracteres codificadas como "<span>" na listagem de código anterior são conhecidas como "cadeias de caracteres mágicas" e valores numéricos codificados, como 6 são conhecidos como "números mágicos". Esses valores "Magic" são indesejáveis por muitas razões e você deve tentar evitá-los, se possível.
Examine o código anterior para considerar como o código pode ser interrompido se você tiver codificado a cadeia
"<span>"de caracteres várias vezes em seu código, mas digitou incorretamente uma instância dele como"<sapn>".O compilador não captura
"<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 código, pode ser difícil rastrear.Além disso, se você alterar a cadeia
"<span>"de caracteres para menor"<div>", mas esquecer de alterar o número6para5, o código produzirá resultados indesejáveis.Atualize o 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));Reserve um minuto para examinar o código atualizado e o uso da palavra-chave
const, conforme usado emconst string openSpan = "<span>";.O código usa uma constante com a
constpalavra-chave. Uma constante permite definir e inicializar uma variável cujo valor nunca pode ser alterado. Em seguida, você usaria essa constante no restante do código sempre que precisasse desse valor. Isso garante que o valor seja definido apenas uma vez e o erro de ortografia daconstvariável seja capturado pelo compilador.A listagem de código anterior é uma maneira mais segura de escrever o mesmo código que você examinou na seção anterior. Agora, se o valor das
openSpanalterações for<div>alterado, a linha de código que usa aLengthpropriedade continuará sendo válida.
Recapitulação
Esta unidade cobriu muito material. Aqui estão as coisas mais importantes a serem lembradas:
-
IndexOf()fornece a primeira posição de um caractere ou cadeia de caracteres dentro de outra cadeia de caracteres. -
IndexOf()retornará-1se não conseguir encontrar uma correspondência. -
Substring()retorna apenas a parte especificada de uma cadeia de caracteres, usando uma posição inicial e um comprimento opcional. - Muitas vezes há mais de uma maneira de resolver um problema. Você usou duas técnicas separadas para localizar todas as instâncias de um determinado caractere ou cadeia de caracteres.
- Evite valores mágicos codificados. Em vez disso, defina uma
constvariável. O valor de uma variável constante não pode ser alterado após a inicialização.