Ejercicio: Uso de los métodos auxiliares de cadena IndexOf() y Substring()
- 25 minutos
En este ejercicio, usará el IndexOf() método para buscar la posición de una o varias cadenas de caracteres dentro de una cadena más grande. Usa el método Substring() para devolver la parte de la cadena más grande que sigue a las posiciones de caracteres que especificas.
También va a usar una versión sobrecargada del método Substring() para establecer la longitud de caracteres que se devolverán después de una posición especificada en una cadena.
Preparación del entorno de creación de código
Este módulo incluye actividades prácticas que le guían por el proceso de compilación y ejecución de código de demostración. Se recomienda completar estas actividades con Visual Studio Code como entorno de desarrollo. El uso de Visual Studio Code para estas actividades le ayuda a familiarizarse con la escritura y ejecución de código en un entorno de desarrollador que usan profesionales de todo el mundo.
Nota:
Si ha completado otros módulos de Microsoft Learn de esta serie de C#, es posible que ya haya creado una carpeta de proyecto para los ejemplos de código. Si ese es el caso, puede omitir la siguiente sección de pasos y eliminar el código del archivo Project.cs usado para un ejercicio anterior.
Abre Visual Studio Code.
Puede usar el menú Inicio de Windows (o un recurso equivalente para otro sistema operativo) para abrir Visual Studio Code.
En Visual Studio Code, en el menú Archivo, seleccione Abrir archivo.
En el cuadro de diálogo Abrir carpeta , vaya a la carpeta Escritorio de Windows.
Si tiene una ubicación de carpeta diferente en la que mantiene los proyectos de código, puede usar esa ubicación de carpeta en su lugar. Durante este curso, lo importante es tener una ubicación fácil de localizar y recordar.
En el cuadro de diálogo Abrir carpeta, elija Seleccionar carpeta.
Si ve un cuadro de diálogo de seguridad en el que se le pregunta si confía en los autores, seleccione Sí.
En el menú Terminal de Visual Studio Code, seleccione Nuevo terminal.
Observe que una ventana de comandos en el panel del Terminal muestra la ruta de acceso de la carpeta actual. Por ejemplo:
C:\Users\someuser\Desktop>En la línea de comandos del terminal, para crear una nueva aplicación de consola en una carpeta especificada, escriba dotnet new console -o ./CsharpProjects/TestProject y presione Entrar.
Este comando de la CLI de .NET usa una plantilla de programa de .NET para crear un nuevo proyecto de aplicación de consola de C# en la ubicación de carpeta especificada. El comando crea las carpetas CsharpProjects y TestProject, y usa TestProject como nombre del archivo
.csproj.En el panel EXPLORADOR, expanda la carpeta CsharpProjects.
Debería ver la carpeta TestProject y dos archivos, un archivo de programa de C# llamado Program.cs y un archivo de proyecto de C# llamado TestProject.csproj.
En el panel EXPLORADOR, para ver el archivo de código en el panel Editor, seleccione Program.cs.
Elimine las líneas de código existentes.
Use este proyecto de consola de C# para crear, compilar y ejecutar ejemplos de código durante este módulo.
Cierre el panel del terminal.
Escribir código para buscar pares de paréntesis incrustados en una cadena
Asegúrese de que ha abierto Visual Studio Code y de que Program.cs se muestra en el panel Editor.
Nota:
Program.cs debe estar vacío. Si no es así, seleccione y elimine todas las líneas de código.
En el Editor de Visual Studio Code, escriba el código siguiente:
string message = "Find what is (inside the parentheses)"; int openingPosition = message.IndexOf('('); int closingPosition = message.IndexOf(')'); Console.WriteLine(openingPosition); Console.WriteLine(closingPosition);En el menú Archivo de Visual Studio Code, seleccione Guardar.
El archivo Program.cs debe guardarse antes de compilar o ejecutar el código.
En el panel EXPLORER, para abrir un terminal en la ubicación de la carpeta TestProject, haga clic con el botón derecho en TestProject y, a continuación, seleccione Abrir en terminal integrado.
Debe abrirse un panel de terminal y debe incluir un símbolo del sistema que muestre que el terminal está abierto en la ubicación de la carpeta TestProject.
En la ventana de comandos de Terminal, para ejecutar tu código, escribe dotnet run y presiona la tecla Enter.
Nota:
Si ve un mensaje que indica "No se ha podido encontrar un proyecto para ejecutar", asegúrese de que el símbolo del sistema del terminal muestra la ubicación de carpeta TestProject prevista. Por ejemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Deberías ver la siguiente salida:
13 36En este caso, el índice del
(carácter es 13. Recuerde que estos valores están basados en cero, por lo que es el 14º carácter de la cadena. El índice del)carácter es36.Ahora que tiene los dos índices, puede usarlos como límites para recuperar el valor entre ellos.
Agregar código para recuperar el valor entre paréntesis
Actualice el código en el editor de Visual Studio Code de la siguiente manera:
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));Guarde el archivo de código y use Visual Studio Code para ejecutar el código. Deberías ver la siguiente salida:
(inside the parenthesesEl
Substring()método necesita la posición inicial y el número de caracteres, o longitud, para recuperar. Por lo tanto, calcula la longitud en una variable temporal denominadalengthy la pasa con elopeningPositionvalor para recuperar la cadena dentro del paréntesis.El resultado está cerrado, pero la salida incluye el paréntesis de apertura. En este ejercicio, no se desea incluir el paréntesis. Para quitar el paréntesis de la salida, debe actualizar el código para omitir el índice del paréntesis en sí.
Modificación de la posición inicial de la sub cadena
Actualice el código en el editor de Visual Studio Code de la siguiente manera:
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));Guarde el archivo de código y use Visual Studio Code para ejecutar el código. Deberías ver la siguiente salida:
inside the parenthesesDedique un momento a revisar el código anterior y la línea
openingPosition += 1;.Al aumentar
openingPositionen1, omite el carácter de paréntesis de apertura.El motivo de usar el valor
1es porque se trata de la longitud del carácter. Si intenta localizar un valor a partir de una cadena más larga, por ejemplo,<div>o---, usaría la longitud de esa cadena en su lugar.Actualice el código en el editor de Visual Studio Code de la siguiente manera:
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));Dedique un momento a revisar el código anterior y la línea
openingPosition += 6;.El fragmento de código anterior muestra cómo buscar el valor dentro de una etiqueta de apertura y cierre
<span>.En este caso, agregas
6alopeningPositioncomo desplazamiento para calcular la longitud de la subcadena.
Evitar valores mágicos
Las cadenas codificadas de forma rígida, como "<span>" en la lista de código anterior, se conocen como "cadenas mágicas" y valores numéricos codificados de forma rígida, como 6 se conocen como "números mágicos". Estos valores "mágicos" no son deseables por muchas razones y deberías intentar evitarlos si es posible.
Revise el código anterior para considerar cómo podría interrumpirse el código si ha codificado de forma rígida la cadena
"<span>"varias veces en el código, pero ha escrito incorrectamente una instancia como"<sapn>".El compilador no detecta
"<sapn>"en tiempo de compilación porque el valor está en una cadena. El error ortográfico conduce a problemas en tiempo de ejecución y, dependiendo de la complejidad de tu código, podría ser difícil de rastrear.Además, si cambia la cadena
"<span>"a la más corta"<div>", pero olvida cambiar el número6a5, el código genera resultados no deseados.Actualice el código en el editor de Visual Studio Code de la siguiente manera:
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));Dedique un minuto a examinar el código actualizado y el uso de la palabra clave
constcomo se usa enconst string openSpan = "<span>";.El código usa una constante con la
constpalabra clave . Una constante permite definir e inicializar una variable cuyo valor nunca se puede cambiar. Después, usaría esa constante en el resto del código siempre que necesite ese valor. Esto garantiza que el compilador solo define el valor una vez y que el compilador detecta errores ortográficos de laconstvariable.La lista de código anterior es una manera más segura de escribir el mismo código que ha examinado en la sección anterior. Ahora, si el valor de
openSpancambia a<div>, la línea de código que usa laLengthpropiedad sigue siendo válida.
Resumen
En esta unidad hemos visto mucha materia. Estas son las cosas más importantes que se deben recordar:
IndexOf()proporciona la primera posición de un carácter o una cadena dentro de otra cadena.IndexOf()devuelve-1si no encuentra ninguna coincidencia.Substring()devuelve solo la parte especificada de una cadena, utilizando una posición inicial y una longitud opcional.- A menudo hay más de una manera de resolver un problema. Ha usado dos técnicas independientes para buscar todas las instancias de un carácter o cadena determinado.
- Evite los valores mágicos codificados de forma rígida. En su lugar, defina una
constvariable. El valor de una variable constante no se puede cambiar después de la inicialización.