Convertir cadena a Mayúscula Inicial o Tipo Título con C# .NET

Tenemos el siguiente requerimiento:
Convertir una cadena a mayúscula inicial o tipo título, por ejemplo si la cadena es “REPORTE DE VENTAS”, el resultado debería ser “Reporte De Ventas”.

Inicialmente pensé, para un tipo String existe una función que convierte a minúsculas y otra a mayúsculas, pero no una que hace eso, que debería escribir una función, que recorra la cadena, carácter por carácter y siempre que sea la primera letra, la pondría en mayúsculas, y el resto en minúsculas.

Por suerte, existe una función propia de .NET para hacer ese trabajo.

Dentro del espacio de nombres System.Globalization, existe el objeto TextInfo que tiene la función ToTitleCase, la cual hace el milagro esperado.

Primero referencias el espacio de nombres
using System.Globalization;

Luego tienes la cadena:
String cadena = “REPORTE DE VENTAS”;

Luego, creas un objeto TextInfo:
TextInfo textoInfo = new CultureInfo("es-PE", false).TextInfo;

Se indica la referencia cultural, en mi caso “Español, Perú”, puedes cambiarla por la que te corresponde. La referencia es importante, según el artículo de la función ToTitleCase, la salida depende de la referencia cultural.
String resultado = textoInfo.ToTitleCase(cadena.ToLower());

Console.WriteLine(resultado);

//el resultado sería:
//Reporte De Ventas

El código completo sería:
String cadena = “REPORTE DE VENTAS”;

TextInfo textoInfo = new CultureInfo("es-PE", false).TextInfo;

String resultado = textoInfo.ToTitleCase(cadena);

Console.WriteLine(resultado);

La función ToTitleCase:

  • Respeta los acrónimos o cualquier palabra en mayúsculas, por ejemplo si en la cadena está la palabra UNESCO, no la convertirá. En el ejemplo utilizo ToLower para convertir la cadena a minúsculas.

  • La conversión depende de la referencia cultura, es decir la conversión cuando es español, es diferente en inglés o francés.

  • El resultado no es lingüísticamente correcto.

  • Microsoft indica que la función es simple, y que podría ser más lenta en el futuro, ya que se considera incluir mejoras, pero esas mejoras harían más lento el algoritmo. Lo de lento puedes pensarlo en milisegundos o un grado inferior claro.

  • La cadena resultado debe tener la misma longitud que la cadena entrada, pero en un futuro podría cambiar.

  • Esta función también existe en .NET Core, desde la versión 2.0.

Comentarios