es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Método que toma un mensaje y un índice, crea una subcadena usando el índice.

Problema: Quiero escribir un método que tome una pareja de mensaje/índice como esta:

("Hola, soy *Nombre1, ¿cómo estás haciendo *Nombre2?", 2)

El índice se refiere al nombre delimitado por asteriscos en el mensaje. Entonces, si el índice es 1, debería referirse a *Nombre1, si es 2 debería referirse a *Nombre2.

El método debería devolver solo el nombre con el asterisco (*Nombre2).

He intentado jugar con las subcadenas, tomando el primer delimitador * y terminando cuando llegamos a un carácter que no es una letra, número, guión bajo o guión, pero la lógica simplemente no está funcionando.

Sé que esto es similar a algunos problemas en SO, pero no puedo encontrar nada específico. Cualquier ayuda es apreciada.

Esto es lo que queda de mi intento muy vago hasta ahora. Basado en este hilo:

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Para resolver este problema, necesitamos seguir los siguientes pasos:

    1. Encontrar la ubicación del nombre deseado usando el índice dado.
    2. Extraer el nombre de la cadena, incluyendo el delimitador de asterisco.
    3. Devolver el nombre extraído.

    Así es como podemos implementarlo en C#:

    public string GetIndexedName(string message, int index)
    {
        // Encontrar los índices de inicio y final del nombre deseado
        int startIndex = message.IndexOf($"*Name{index}") + 1;
        int endIndex = message.IndexOf(" ", startIndex);
    
        // Extraer el nombre deseado
        string name = message.Substring(startIndex, endIndex - startIndex);
    
        return name;
    }
    

    Veamos cada línea del código para entender lo que está sucediendo:

    1. En la primera línea del método, declaramos la firma del método que toma dos argumentos – mensaje e índice, y devuelve una cadena.
    public string GetIndexedName(string message, int index)
    
    1. En la segunda línea, declaramos dos variables – startIndex y endIndex – que contendrán los índices de inicio y final del nombre que queremos extraer.
    int startIndex = message.IndexOf($"*Name{index}") + 1;
    int endIndex = message.IndexOf(" ", startIndex);
    

    Usamos el método IndexOf para encontrar el índice del inicio del nombre deseado en la cadena de mensaje. Construimos la cadena de búsqueda usando el argumento de índice en la forma *Name {index}, que corresponde al nombre que queremos extraer. Agregamos 1 al resultado del método IndexOf para tener en cuenta el delimitador de asterisco.

    A continuación, encontramos el índice final del nombre buscando el primer carácter de espacio después del índice de inicio.

    1. En la tercera línea, usamos el método Substring para extraer el nombre de la cadena de mensaje.
    string name = message.Substring(startIndex, endIndex - startIndex);
    

    El método Substring toma dos argumentos – el índice de inicio y la longitud de la subcadena que queremos extraer. Calculamos la longitud restando el índice de inicio del índice final.

    1. Finalmente, devolvemos el nombre extraído.
    return name;
    

    Ahora, podemos llamar a este método con cualquier valor de mensaje e índice, y extraerá correctamente el nombre deseado de la cadena de mensaje.

    string message = "Hola, yo soy *Name1, ¿cómo estás haciendo *Name2?";
    int index = 2;
    
    string name = GetIndexedName(message, index); // name == "*Name2"
    

    Espero que esto ayude. Hazme saber si tienes alguna pregunta.

Comments are closed.