Eu gostaria de ter um método que transforma o primeiro caractere de uma string em minúsculas.
Minhas abordagens:
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));
}
Qual seria sua abordagem?
char.ToLower(name[0]).ToString() + name.Substring(1)
+
operador é lento quando você está concatenando muitas strings. Nesse caso, aStringBuilder
teria um desempenho muito melhor. No entanto,+
é muito mais rápido questring.Format
. Use o último quando você realmente precisar formatar algo (como exibir números inteiros, duplos ou datas).+
operador não fica lento, porque o compilador o transforma em umString.Concat
(no entanto,String.Join
é mais rápido do queString.Concat
por algum motivo bobo).public static string ToLowerFirst(this string source) { if (string.IsNullOrWhiteSpace(source)) return source; var charArray = source.ToCharArray(); charArray[0] = char.ToLower(charArray[0]); return new string(charArray); }
Baseada no comentário de @ MatteoMigliore.Dependendo da situação, um pouco de programação defensiva pode ser desejável:
A
if
instrução também evita que uma nova string seja criada se não for alterada. Você pode querer que o método falhe na entrada nula e ative umArgumentNullException
.Como as pessoas mencionaram, usar
String.Format
para isso é um exagero.fonte
Apenas no caso de ajudar alguém que tropeçar nessa resposta.
Eu acho que isso seria melhor como um método de extensão, então você pode chamá-lo com yourString.FirstCharacterToLower ();
fonte
O meu é
fonte
val.Remove
? Parece um pouco contra-intuitivo para mim.Eu gosto da resposta aceita, mas, além de marcar
string.IsNullOrEmpty
, também verificaria seChar.IsLower(name[1])
você está lidando com abreviação. Por exemplo, você não gostaria que "AIDS" se tornasse "AIDS".fonte
A solução mais rápida que conheço sem abusar do c #:
fonte
Combinou alguns e tornou uma extensão encadeada. Adicionado curto-circuito em espaço em branco e sem letra.
fonte
Este é um pequeno método de extensão usando a sintaxe mais recente e as validações corretas
fonte
Usa isto:
fonte
É melhor usar do
String.Concat
queString.Format
se você souber que o formato não é alterar dados e se deseja apenas concatenação.fonte