· Andrés Ledo · NET  · Lectura en 2 min

C# Contar palabras de un texto con .NET

Un ejercicio común en los estudios o incluso en una entrevista de trabajo es pedirte que hagas una función que cuente las palabras de un texto y las muestre por pantalla.

Un ejercicio común en los estudios o incluso en una entrevista de trabajo es pedirte que hagas una función que cuente las palabras de un texto y las muestre por pantalla.

El ejercicio en sí no es demasiado difícil y hay bastantes formas diferentes de hacerlo, una de ellas puede ser utilizar la función .Split para que nos separe las palabras del texto, una vez hecho esto debemos almacenar la palabra en un diccionario o en un array junto con la cantidad de veces que aparece en el texto.

Con cada elemento del resultado del Split debemos comprobar si existe en nuestro diccionario. En caso de que no exista lo agregamos como Key con valor 1 y si existe le sumamos uno al valor de la palabra.

Por último, solo nos quedaría mostrarlo por pantalla y listo, ejercicio resuelto. Si quieres probar si has hecho bien, el ejercicio recuerda que tenemos una herramienta para contar palabras online, en esta web.

Código fuente para contar palabras en C#

He preparado un código fuente muy sencillo que cuenta las palabras y las muestra en una aplicación de consola.

static void Main(string[] args)
        {
            var text = GetText();
            //Eliminar el texto símbolos y demás que no nos interesen.
            string cleanText = text.ToLower().Replace(",", "").Replace(".", "").Replace(";", "").Replace("¿", "").Replace("?", "");
            Dictionary<string, int> wordsCount = new();
            //Separamos el texto por espacios, saltos de linea. El StringSplitOptions.RemoveEmptyEntries sirve para que no se guarden entradas vacias en el array
            var arrText = cleanText.Split(
                " ",               
                StringSplitOptions.RemoveEmptyEntries
                );
            foreach (var word in arrText)
            {
                string wordLower = word.ToLower();
                //Comprobamos si la palabra ya existe en el diccionario.
                if (wordsCount.ContainsKey(wordLower))
                {
                    //Si existe le sumamos una repetición más.
                    wordsCount[wordLower] = wordsCount[wordLower] + 1;
                }
                else
                {
                    //Si no, la agregamos al diccionario con valor 1. 
                    wordsCount.Add(wordLower, 1);
                }
            }
            //Ordenamos el diccionario de mayor a menor
            var sortedDict = wordsCount.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value);
            //Mostramos las palabras por consola con sus repeticiones
            foreach (var word in sortedDict)
            {
                Console.WriteLine($"{word.Key} tiene {word.Value} repeticiones");
            }
        }
static string GetText()
        {
            string text = @"Hola Hola Hola, Soy un un texto cualquiera...";
            return text;
        }

Si te fijas en el código algunos símbolos para que no nos cuente como palabras diferentes en caso de que tengan algún símbolo y aparte le paso el parámetro StringSplitOptions.RemoveEmptyEntries para que no nos guarde valores en blanco en el Split.

El código puede mejorarse añadiendo eliminando más símbolos, quitando los tildes a las palabras y añadiendo que el Split también tenga en cuenta saltos de línea, pero para que te hagas una idea ya te sirve.

    Compartir
    Volver al blog

    Artículos relacionados

    Ver todos los artículos »
    PHP strpos

    PHP strpos

    La función "strpos" es una de las más utilizadas en PHP y es muy útil para buscar la posición de una subcadena dentro de una cadena de texto..

    C#: Cómo usar SqlCommand Update

    C#: Cómo usar SqlCommand Update

    En el desarrollo de aplicaciones con acceso a bases de datos SQL, el manejo adecuado de las operaciones CRUD (Crear, Leer, Actualizar, Eliminar) es...