visual validar una studio saber primera poner palabra minusculas mayusculas mayuscula letra convertir cada c# asp.net regex

c# - validar - Convierta toda la primera letra a mayúscula, descanse más abajo para cada palabra



saber si una letra es mayuscula c# (8)

Además de la primera respuesta, recuerde cambiar el índice de inicio de selección de cadena al final de la palabra u obtendrá el orden inverso de las letras en la cadena.

s.SelectionStart=s.Length;

Tengo una cadena de texto (alrededor de 5-6 palabras en su mayoría) que necesito convertir.

Actualmente el texto se ve así:

THIS IS MY TEXT RIGHT NOW

Quiero convertirlo a:

This Is My Text Right Now

Puedo recorrer mi colección de cadenas, pero no estoy seguro de cómo realizar esta modificación de texto.


Cuando se construyen mesas grandes, la velocidad es una preocupación, por lo que la segunda función de Jamie Dixon es la mejor, pero no funciona del todo como es ...

No puede tomar todas las letras en minúscula, y solo escribe en mayúscula la primera letra de la cadena, no la primera letra de cada palabra en la cadena ... la siguiente opción corrige los dos problemas:

public string UppercaseFirstEach(string s) { char[] a = s.ToLower().ToCharArray(); for (int i = 0; i < a.Count(); i++ ) { a[i] = i == 0 || a[i-1] == '' '' ? char.ToUpper(a[i]) : a[i]; } return new string(a); }

Aunque en este punto, si esta sigue siendo la opción más rápida es incierta, la solución Regex provista por George Mauer podría ser más rápida ... alguien que se preocupe lo suficiente debería probarla.


Hay un par de formas de convertir el primer carácter de una cuerda en mayúscula.

La primera forma es crear un método que simplemente bloquee el primer carácter y anexe el resto de la cadena usando una subcadena:

public string UppercaseFirst(string s) { return char.ToUpper(s[0]) + s.Substring(1); }

La segunda forma (que es un poco más rápida) es dividir la cadena en una matriz char y luego volver a construir la cadena:

public string UppercaseFirst(string s) { char[] a = s.ToCharArray(); a[0] = char.ToUpper(a[0]); return new string(a); }


No probado pero algo así debería funcionar:

var phrase = "THIS IS MY TEXT RIGHT NOW"; var rx = new System.Text.RegularExpressions.Regex(@"(?<=/w)/w"); var newString = rx.Replace(phrase,new MatchEvaluator(m=>m.Value.ToLowerInvariant()));

Esencialmente dice "preformar una coincidencia de expresiones regulares en todas las apariciones de un carácter alfanumérico que sigue a otro carácter alfanumérico y luego reemplazarlo con una versión en minúsculas de sí mismo"


No sé si la solución a continuación es más o menos eficiente que la respuesta de jspcal, pero estoy bastante seguro de que requiere menos creación de objetos que la de Jamie y George.

string s = "THIS IS MY TEXT RIGHT NOW"; StringBuilder sb = new StringBuilder(s.Length); bool capitalize = true; foreach (char c in s) { sb.Append(capitalize ? Char.ToUpper(c) : Char.ToLower(c)); capitalize = !Char.IsLetter(c); } return sb.ToString();


Probablemente prefiera invocar ToTitleCase desde CultureInfo ( System.Globalization ) que Thread.CurrentThread ( System.Threading )

string s = "THIS IS MY TEXT RIGHT NOW"; s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());

pero debería ser lo mismo que la solución jspcal

EDITAR

En realidad, esas soluciones no son las mismas : CurrentThread --calls -> CultureInfo !

System.Threading.Thread.CurrentThread.CurrentCulture

string s = "THIS IS MY TEXT RIGHT NOW"; s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()); IL_0000: ldstr "THIS IS MY TEXT RIGHT NOW" IL_0005: stloc.0 // s IL_0006: call System.Threading.Thread.get_CurrentThread IL_000B: callvirt System.Threading.Thread.get_CurrentCulture IL_0010: callvirt System.Globalization.CultureInfo.get_TextInfo IL_0015: ldloc.0 // s IL_0016: callvirt System.String.ToLower IL_001B: callvirt System.Globalization.TextInfo.ToTitleCase IL_0020: stloc.0 // s

System.Globalization.CultureInfo.CurrentCulture

string s = "THIS IS MY TEXT RIGHT NOW"; s = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()); IL_0000: ldstr "THIS IS MY TEXT RIGHT NOW" IL_0005: stloc.0 // s IL_0006: call System.Globalization.CultureInfo.get_CurrentCulture IL_000B: callvirt System.Globalization.CultureInfo.get_TextInfo IL_0010: ldloc.0 // s IL_0011: callvirt System.String.ToLower IL_0016: callvirt System.Globalization.TextInfo.ToTitleCase IL_001B: stloc.0 // s

Referencias


Si está usando una página web, también puede usar CSS:

style="text-transform:capitalize;"


string s = "THIS IS MY TEXT RIGHT NOW"; s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());