Convertir cadena a mayúsculas y minúsculas
Tengo una cadena que contiene palabras en una combinación de caracteres en mayúsculas y minúsculas.
Por ejemplo:string myData = "a Simple string";
Necesito convertir el primer carácter de cada palabra (separado por espacios) a mayúsculas. Entonces quiero el resultado como:string myData ="A Simple String";
¿Hay alguna manera fácil de hacer esto? No quiero dividir la cadena y realizar la conversión (ese será mi último recurso). Además, se garantiza que las cadenas estén en inglés.
MSDN: TextInfo.ToTitleCase
Asegúrese de incluir:using System.Globalization
string title = "war and peace";
TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
title = textInfo.ToTitleCase(title);
Console.WriteLine(title) ; //War And Peace
//When text is ALL UPPERCASE...
title = "WAR AND PEACE" ;
title = textInfo.ToTitleCase(title);
Console.WriteLine(title) ; //WAR AND PEACE
//You need to call ToLower to make it work
title = textInfo.ToTitleCase(title.ToLower());
Console.WriteLine(title) ; //War And Peace
Prueba esto:
string myText = "a Simple string";
string asTitleCase =
System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.
ToTitleCase(myText.ToLower());
Como ya se ha señalado, es posible que el uso de TextInfo.ToTitleCase no le brinde los resultados exactos que desea. Si necesita más control sobre la salida, puede hacer algo como esto:
IEnumerable<char> CharsToTitleCase(string s)
{
bool newWord = true;
foreach(char c in s)
{
if(newWord) { yield return Char.ToUpper(c); newWord = false; }
else yield return Char.ToLower(c);
if(c==' ') newWord = true;
}
}
Y luego úsalo así:
var asTitleCase = new string( CharsToTitleCase(myText).ToArray() );
Otra variación más. Basándome en varios consejos aquí, lo he reducido a este método de extensión, que funciona muy bien para mis propósitos:
public static string ToTitleCase(this string s) =>
CultureInfo.InvariantCulture.TextInfo.ToTitleCase(s.ToLower());
Personalmente probé el TextInfo.ToTitleCase
método, pero no entiendo por qué no funciona cuando todos los caracteres están en mayúsculas.
Aunque me gusta la función util proporcionada por Winston Smith , permítanme proporcionarles la función que estoy usando actualmente:
public static String TitleCaseString(String s)
{
if (s == null) return s;
String[] words = s.Split(' ');
for (int i = 0; i < words.Length; i++)
{
if (words[i].Length == 0) continue;
Char firstChar = Char.ToUpper(words[i][0]);
String rest = "";
if (words[i].Length > 1)
{
rest = words[i].Substring(1).ToLower();
}
words[i] = firstChar + rest;
}
return String.Join(" ", words);
}
Jugando con algunas cadenas de prueba :
String ts1 = "Converting string to title case in C#";
String ts2 = "C";
String ts3 = "";
String ts4 = " ";
String ts5 = null;
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts1)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts2)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts3)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts4)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts5)));
Dando salida :
|Converting String To Title Case In C#|
|C|
||
| |
||