Exercício – utilizar os métodos auxiliares de cadeia IndexOf() e Substring()
- {númeroDeMinutos} minutos
Neste exercício, você usa 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 caracteres 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.
Prepare seu ambiente de codificação
Este módulo inclui atividades práticas que o guiam através do processo de criação e execução de código de demonstração. Você é incentivado a concluir essas atividades usando o Visual Studio Code como seu ambiente de desenvolvimento. Usar o 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ê concluiu outros módulos do Microsoft Learn nesta série C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Se esse for o caso, você pode ignorar a seção a seguir das etapas e excluir o código no Project.cs arquivo usado para um exercício anterior.
Abre Visual Studio Code.
Você pode usar o menu Iniciar do Windows (ou recurso equivalente para outro sistema operacional) para abrir o Visual Studio Code.
No menu Arquivo de código do Visual Studio, 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 onde você mantém projetos de código, você pode usar esse local de pasta em vez disso. Para este 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 vir uma caixa de diálogo de segurança a perguntar se confia nos autores, selecione Sim.
No menu Terminal de código do Visual Studio, selecione Novo terminal.
Observe que um prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:
C:\Users\someuser\Desktop>No prompt de comando do Terminal, para criar um novo aplicativo de console em uma pasta especificada, digite dotnet new console -o ./CsharpProjects/TestProject e pressione Enter.
Este comando .NET CLI usa um modelo de programa .NET para criar um 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
.csprojarquivo.No painel do EXPLORER, expanda a pasta CsharpProjects.
Você deve ver a pasta TestProject e dois arquivos, um arquivo de programa C# chamado Program.cs e um arquivo de projeto C# chamado TestProject.csproj.
No painel EXPLORER, para visualizar seu arquivo de código no painel Editor, selecione Program.cs.
Exclua as linhas de código existentes.
Você está usando este projeto de console C# para criar, compilar e executar exemplos de código durante este módulo.
Feche o painel Terminal.
Escrever código para encontrar pares de parênteses incorporados em uma cadeia de caracteres
Verifique se você tem o Visual Studio Code aberto e Program.cs exibido no painel Editor.
Observação
Program.cs deve estar vazio. Se não estiver, selecione e exclua todas as linhas de código.
Digite o seguinte código no Editor de Códigos do Visual Studio:
string message = "Find what is (inside the parentheses)"; int openingPosition = message.IndexOf('('); int closingPosition = message.IndexOf(')'); Console.WriteLine(openingPosition); Console.WriteLine(closingPosition);No menu File do Visual Studio Code, selecione Guardar.
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 uma linha de comandos, indicando que o Terminal está aberto na localização da pasta 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 encontrar um projeto para executar", verifique se o prompt de comando do Terminal exibe o local esperado da pasta TestProject. Por exemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Deverá ver o seguinte resultado:
13 36Neste caso, o índice do caractere
(é 13. Lembre-se, 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, você pode usá-los como os limites para recuperar o valor entre eles.
Adicionar código para recuperar o valor entre parênteses
Atualize seu código no Editor de Códigos do Visual Studio 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 seu arquivo de código e, em seguida, use o Visual Studio Code para executar seu código. Deverá ver o seguinte resultado:
(inside the parenthesesO
Substring()método precisa da posição inicial e do número de caracteres, ou comprimento, para recuperar. Assim, você calcula o comprimento em uma variável temporária chamadalength, e 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 do parêntese 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 subsequência
Atualize seu código no Editor de Códigos do Visual Studio 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 seu arquivo de código e, em seguida, use o Visual Studio Code para executar seu código. Deverá ver o seguinte resultado:
inside the parenthesesReserve um momento para rever o código anterior e a linha
openingPosition += 1;.Ao aumentar o
openingPositionpor1, você pula o caractere de parêntese de abertura.A razão pela qual você está usando o valor
1é porque esse é o comprimento do personagem. 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 seu código no Editor de Códigos do Visual Studio 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 rever o código anterior e a linha
openingPosition += 6;.O trecho de código anterior mostra como encontrar o valor dentro de uma tag de abertura e fechamento
<span>.Nesse caso, você está adicionando
6aoopeningPositioncomo o deslocamento para calcular o comprimento da substring.
Evite valores mágicos
Strings codificadas como "<span>" na listagem de código anterior são conhecidas como "strings mágicas" e valores numéricos codificados como 6 são conhecidos como "números mágicos". Estes valores 'mágicos' são indesejáveis por muitas razões e devem tentar evitá-los, se possível.
Revise o código anterior para considerar como o código pode quebrar se você codificou a cadeia de caracteres
"<span>"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 ortográfico leva a problemas em tempo de execução e, dependendo da complexidade do seu código, pode ser difícil rastreá-lo.Além disso, se você alterar a string
"<span>"para a mais curta"<div>", mas esquecer de alterar o número6para5, então seu código produz resultados indesejáveis.Atualize seu código no Editor de Códigos do Visual Studio 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
constcomo usada 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. Você usaria essa constante no resto do código sempre que precisasse desse valor. Isso garante que o valor seja definido apenas uma vez e que a ortografia incorreta daconstvariável seja detetada 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 de
openSpanalterar para<div>, a linha de código que usaLengthpropriedade continua a ser 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()retorna-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.