c# - before - BestPractice-Transforma el primer carácter de una cuerda en minúsculas
string replace c# (7)
Combinado algunos y lo hizo una extensión encadenable. Se agregó un cortocircuito en espacios en blanco y sin letras.
public static string FirstLower(this string input) =>
(!string.IsNullOrWhiteSpace(input) && input.Length > 0
&& char.IsLetter(input[0]) && !char.IsLower(input[0]))
? input[0].ToString().ToLowerInvariant() + input.Remove(0, 1) : input;
Me gustaría tener un método que transforme el primer carácter de una cadena en minúscula.
Mis enfoques:
1.
public static string ReplaceFirstCharacterToLowerVariant(string name)
{
return String.Format("{0}{1}", name.First().ToString().ToLowerInvariant(), name.Substring(1));
}
2.
public static IEnumerable<char> FirstLetterToLowerCase(string value)
{
var firstChar = (byte)value.First();
return string.Format("{0}{1}", (char)(firstChar + 32), value.Substring(1));
}
¿Cuál sería tu enfoque?
Dependiendo de la situación, un poco de programación defensiva podría ser deseable:
public static string FirstCharacterToLower(string str)
{
if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
return str;
return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}
La instrucción if
también evita que se cree una nueva cadena si no se va a modificar de todos modos. Es posible que desee tener el método de error en la entrada nula en su lugar, y lanzar una ArgumentNullException
.
Como han mencionado las personas, utilizar String.Format
para esto es excesivo.
El mio es
if (!string.IsNullOrEmpty (val) && val.Length > 0)
{
return val[0].ToString().ToLowerInvariant() + val.Remove (0,1);
}
Es mejor usar String.Concat que String.Format si sabe que el formato no es datos de cambio, y solo se desea concatenación.
Me gusta la respuesta aceptada, pero además de marcar string.IsNullOrEmpty
también verificaría si Char.IsLower(name[1])
en caso de que se trate de abreviatura. Por ejemplo, no querría que el "SIDA" se convirtiera en "SIDA".
Solo en caso de que ayude a cualquiera que encuentre esta respuesta.
Creo que esto sería lo mejor como método de extensión, luego puedes llamarlo con yourString.FirstCharacterToLower ();
public static class StringExtensions
{
public static string FirstCharacterToLower(this string str)
{
if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
{
return str;
}
return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}
}
Yo usaría esto:
Char.ToLowerInvariant(name[0]) + name.Substring(1)
Su primera solución no está optimizada: string.Format es lento y no lo necesita si tiene un formato que nunca cambiará.
El segundo es feo y no se puede mantener.